JAVA

本文主要探讨JAVA中的继承特性,包括构造方法的使用、final关键字的意义以及多态的概念和应用。详细讲解了继承中构造方法的注意事项,如如何处理父类无参构造方法的情况。同时,解释了final关键字在类、变量和方法上的应用,以及其初始化时机。最后,阐述了多态的条件、成员访问特点、好处和弊端,并提供了如何解决多态中访问子类特有功能的方法。
摘要由CSDN通过智能技术生成

Day10

继承的注意事项

1.子类的构造方法(有参/无参)都要默认的访问父类的无参构造方法;
2.A 如果父类中没有提供无参构造方法,会出现什么现象?
编译不通过,父类中没有无参(父类提供有参,系统给父类不会提供无参)
B如何解决呢?(面试过程中,前两个即可!)
1)给出父类的无参构造方法…
2)在子类的构造方法中通过super(…)间接的访问父类的有参构造方法…
3)在子类中的有参构造方法中,可以通过this()访问当前子类中的无参构造方法,在通过无参构造方法间接访问父类的有参构造方法

//父类
class Father{
   
 //不提供父类的无参构造方法
 /*
 public Father(){
  System.out.println("Father的无参构造方法...") ;
 }
 */
 public Father(String name){
   
  System.out.println("Father的有参构造方法...") ;
 }
}
//子类
class Son extends Father{
   
 public Son(){
   
  //super() ;//默认第一句(隐藏的)
  //在子类中通过super(...),间接访问父类的有参构造方法
  //super ("随便给");
  super("hello...") ; 
  System.out.println("Son的无参构造方法...") ;
 }
 public Son(String name){
   
  //super();
  //super("随便给");
  this() ;
  System.out.println("Son的有参构造方法...") ;
 }
}
//测试类
class ExtendsDemo{
   
 public static void main(String[] args){
   
   //创建子类对象
   Son s = new Son() ;
   System.out.println("-----------------");
   Son s2 = new Son("高圆圆") ;
 }
}

面试题
1.继承关系中,成员变量名称和局部变量名称一致的情况:
a)在子类的局部位置中,有就使用
b)如果没有,在子类的成员位置中找,有就使用
c)如果还没有,在父类中的成员位置中找…
2.继承中的数据的初始化过程:
a)父类进行数据初始化
成员变量
默认初始化
显示初始化
构造方法初始化
3.this.成员变量; 访问本类中的成员变量
super.成员变量;访问父类中的成员变量

class Father{
   
 public int num = 10 ;//0  10 
}
class Son extends Father{
   
 public int num = 20 ; 
 public void method(){
   
  int num = 30 ;
  System.out.println(num) ; //30
  System.out.println(this.num) ;//20
  System.out.println(super.num) ;//10
 }
}
class ExtendsDemo2{
   
 public static void main(String[] args){
   
  Son s = new Son () ;
  s.method() ;
 }
}

1)继承中初始化问题:
需要先让父类进行初始化,因为子类可能要用到父类的数据
2)代码块的执行顺序
静态代码块 > 构造代码块 >构造方法代码块…
3)静态随着类的加载而加载
静态相关的代码块/变量/成员方法,先随着类的加载进行初始化!
案例:
看程序,写结果

//Fu.class
class Fu{
   
 static{
   
  System.out.println("静态代码块Fu") ;
 }
 public Fu(){
   
  System.out.println("构造方法Fu") ;
 }
 {
   
  System.out.println("构造代码块Fu") ;
 }
}
//Zi.class
class Zi extends Fu{
   
 static{
   
  System.out.println("静态代码块Zi") ;
 }
 public Zi(){
   
  System.out.println("构造方法Zi") ;
 }
 {
   
  System.out.println("构造代码块Zi") ;
 }
}
//测试类
class ExtendsDemo3{
   
 public static void main(String[] args){
   
  Zi zi = new Zi() ;
 }
}

结果:
静态代码块Fu
静态代码块Zi
构造代码块Fu
构造方法Fu
构造代码块Zi
构造方法Zi

有了继承,标准类的写法

class Student{
   
 private String name ;
 private int age ;
 public Student(){
   }
 public Student(String name,int age){
   
  this.name = name ;
  this.age = age ;
 }
 public void setName(String name){
   
  this.name = name ;
 }
 public void setAge(int age){
   
  this.age = age ;
 }
 public String getName(){
   
  return name ;
 }
 public int getAge(){
   
  return age ;
 }
 public void study(){
   
  System.out.println("学生主要任务学习,Java") ;
 }
}
//定义老师类
class Teacher{
   
 private String name ;
 private int age ;
 public Teacher(){
   }
 public Teacher(String name,int age){
   
  this.name = name ;
  this.age = age ;
 }
 public void setName(String name){
   
  this.name = name ;
 }
 public void setAge(int age){
   
  this.age = age ;
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值