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 来定位父类。

posted @ 2024-05-06 14:02  takenika  阅读(11)  评论(0)    收藏  举报