COMPLEX-B

导航

继承时候的构造方法问题

1.抽象类的有参构造方法的作用是通过实现类给抽象类的非抽象方法传参
2.子类继承父类后,子类的构造方法会默认调用父类的无参构造方法
3.如果父类只拥有有参构造方法,而没有写无参构造方法,此时父类就只有有参的构造 方法,所以在子类的构造方法中,必须显示的调用父类的有参构造方法,并且是在子类构造方法的第一行调用,否则会报错.
4.因为在新建子类对象时,要先执行父类的构造方法,再执行子类的构造方法
5.父类属性和子类属性可以重名,互不影响,重名后在子类中如果未指定super.默认使用的是子类的变量或方法
6.要在子类中重写父类的属性,在子类的构造方法中使用super.属性名设置
7.继承中的属性值初始化顺序

① 父类的静态属性显式赋值 或 父类的静态代码块执行
② 子类的静态属性显式赋值 或 子类的静态代码块执行
③ 父类的属性显式赋值 或 父类的成员代码块执行
④ 父类的构造方法执行
⑤ 子类的属性显式赋值 或 子类的成员代码块执行
⑥ 子类的构造方法执行
以下代码会执行子类中的a1方法,因为要先执行父类的构造方法,所以子类的显示赋值和构造方法还没来得及执行,a1就已经执行完了,所以num和name都没有赋上值

class A{
    public String name = "zhangsan";
    public A() {
        a1();
    }
    public void a1() {
        System.out.println("a1");
    }
}
public class B extends A{
    public String name = "lisi";
    int num = 0;
    public B() {
        num = 100;
    }
    public void a1() {
        System.out.println(num); // 0
        System.out.println("BBB");
        System.out.println(name); //null
    }

    public static void main(String[] args) {
        B b = new B();
    }
}

posted on 2019-04-28 14:22  COMPLEX-B  阅读(467)  评论(0编辑  收藏  举报