前面我们已经说明了什么是继承?继承的好处弊端等,不清楚的可参照链接 java 继承(上)-CSDN博客
本篇文章主要理解 继承中变量,构造方法,成员方法的访问特点。
1、继承中变量的访问特点
1.1 代码实现
不看结果,尝试看代码。看下是否知道输出的age是什么?
(1)Fu类的代码实现
public class Fu {int age = 40;
}
(2)Zi类的代码实现
public class Zi extends Fu{int height = 175;int age = 30;public void method(){int age = 20;System.out.println(height);System.out.println(age);}
}
(3)Test类的代码实现
public class Test {public static void main(String[] args) {Zi z = new Zi();z.method();}
}
(4)运行结果
1.2 上面运行结果分析,在子类方法中访问变量的次序,遵循“就近原则”,也就是会按下面的次序依次查找。
(1)子类局部范围找;
(2)子类成员范围找;
(3)父类成员范围找;
(4)如果都没有就报错(不考虑父亲的父亲...)。
2、继承中构造方法的访问特点
2.1 代码实现
(1)Fu类的代码实现
public class Fu{public Fu() {System.out.println("父类中无参构造方法被调用。。");}public Fu(int age) {System.out.println("父类中带参构造方法被调用。。");}
}
(2)Zi类的代码实现
public class Zi extends Fu{public Zi(){System.out.println("子类中无参构造方法被调用。。");}public Zi(int age){System.out.println("子类中带参构造方法被调用。。");}
}
2.2 代码分析
(1)通过Zi z = new Zi(); 去调用。
public class Test {public static void main(String[] args) {Zi z = new Zi();}
}
运行结果
特点:子类中所有的构造方法默认都会访问父类中无参的构造方法。
为什么呢?
- 因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。
- 每一个子类构造方法的第一条语句默认都是:super(),也就是说下面的两个类是等价的。
(2)如果Fu类只有带参构造方法呢?
Fu类:
Zi类就会报错:
原因分析:这是因为父类中有了带参的构造方法的话,它会把无参构造方法覆盖掉,也就是说它就不会有默认的无参构造方法了。那怎么解决呢?很简单,给super加参数,调用父类的有参构造方法即可。
2.3 特点总结
(1)子类中所有的构造方法默认都会访问父类中无参的构造方法;
(2)如果父类中没有无参构造方法,只有带参构造方法,该怎么办呢?
① 通过使用super关键字去显示的调用父类的带参构造方法;
② 在父类中自己提供一个无参构造方法;
③ 推荐:自己给出无参构造方法。
3、继承中成员方法的访问特点
3.1 代码实现
(1)Fu类的代码实现
public class Fu {public void show() {System.out.println("父类的show方法被调用。。");}public void method() {System.out.println("父类的method方法被调用。。");}
}
(2)Zi类的代码实现
public class Zi extends Fu {public void method() {System.out.println("子类中method方法被调用。。");}
}
(3)Test类的代码实现
public class Test {public static void main(String[] args) {Zi z = new Zi();z.method();z.show();}
}
(4)运行结果
3.2 访问特点
通过子类对象访问一个方法过程:
(1)子类成员范围找
(2)父类成员范围找
(3)如果都没有就报错(不考虑父亲的父亲..)
如果想直接访问父类的方法可以通过super关键字。
本文为学习笔记,所参考文章均已附上链接,若有疑问请私信!
创作不易,如果对你有点帮助的话麻烦点个赞支持一下!
新手小白,欢迎留言指正!