java 的继承注意事项 ②
继承 ②
-
如果希望指定去调用父类的某个构造器,则显示调用 super()
-
super() 在使用时,需要放在构造器的第一行
-
super() 和 this() 都只能放在构造器的第一行,因此这两个方法不能共存在一个构造器
-
java所有的类都是 Object类 的子类,Object 是所有类的父类(基类)
- 在 IDEA 中按下 Ctrl +H 查看类继承关系
-
父类构造器的调用不限于直接父类!将一直往上追溯直到 Object类(顶级父类)
- 一个劲的往上追溯
-
子类最多只能继承一个父类(值直接继承),即 java 中是单继承机制。
- 思考:如何让 A类 继承 B类 和 C 类 【A类 继承 B类 继承 C类 ;A类 继承 B类 继承 C类】
-
不能滥用继承,子类和父类之间必须满足 is-a 的逻辑关系
Person is Music? Person Music Music extends Person // 不合理 Animal Cat extents Animal // 这个就合理了
Base.java
public class Base{
... ...
// 当创建子类对象时,不管使用子类的哪个构造器,
// 默认情况下总会去调用父类的无参构造器
public Base(){
System.out.println("父类的无参构造器被调用");
}
public Base(String name){
// do nothing ...
}
... ...
}
Bub.java
public class Bub extends Base{
public Bub(){
// 调用父类的无参构造器使用
//【super()】 或者 【什么都不写,默认就是调用 super()】
System.out.println("子类 Bub() 构造器被调用");
}
public Bub(String name){
// 调用父类的 Base(String name) 构造器
super("qaz")
System.out.println("子类的 sub(String name) 被调用");
}
}
example.java
public class example{
public static void main(String[] args) {
Bub sub = new Bub();
System.out.println();
Bub jack = new Bub("jack");
}
}
- super() 和 this() 都只能放在构造器的第一行,因此这两个方法不能共存在一个构造器
Bub.java
public class Bub extends Base{
public Bub(){
super(); //
this(); // 这样是不成立的
}
}
父类构造器的调用不限于直接父类!将一直往上追溯直到 Object类(顶级父类)
Base
public class Base extends Object{
... ...
}
在 IDEA 中使用 Ctrl+B 来定位父类。

浙公网安备 33010602011771号