第八十五课.super关键字-2

1. 父类有无参构造方法,子类才可以写无参构造方法;父类有含参构造方法,子类才可以写含参构造方法

2. 构造方法不能被继承、重写

3. 当调用无参构造方法时,先调用父类无参构造方法,然后调用子类无参构造方法;当调用含参构造方法时,先调用父类含参构造方法,然后调用子类含参构造方法。

注意:子类不显式调用父类的构造方法时,编译器会默认调用父类的无参构造方法

 

非继承关系中的初始化顺序

1.static静态代码块和静态成员

2.普通成员

3.构造函数执行

 

继承关系中的初始化顺序

1.父类静态代码区和父类静态成员

2.子类静态代码区和子类静态成员

3.父类非静态代码区和普通成员

4.父类构造函数

5.子类非静态代码区和普通成员

6.子类构造函数

例:

package com.xuenixiang.web;



public class Super1 {

    protected String name;

    private String address;

   

    public Super1() {

        System.out.println("父类无参构造被调用");

    }

    public Super1(String name,String address) {

        System.out.println("父类有参构造被调用");

    }

   

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public String getAddress() {

        return address;

    }

    public void setAddress(String address) {

        this.address = address;

    }



}

package com.xuenixiang.web;



public class Super2 extends Super1 {

       private int age;



       public Super2() {

              System.out.println("子类无参构造被调用");

       }



       public Super2(String name, String address) {

              //super(name,address);

              System.out.println("子类有参构造被调用");

       }



       public int getAge() {

              return age;

       }



       public void setAge(int age) {

              this.age = age;

       }



       public void setName(String Mingzi) {

              this.name = Mingzi; // 子类对父类的setName进行重写

              System.out.println("父类的setName方法被重写");

       }



       public void xuenixiang() {

              System.out.println("网站名:" + this.getName());

              System.out.println("网站地址:" + this.getAddress());

              System.out.println("网站年龄:" + this.getAge());

       }



       public static void main(String[] args) {

              Super2 xnx = new Super2("学逆向论坛","www.xuenixiang.com");

              xnx.setName("学逆向论坛");

              xnx.setAddress("www.xuenixiang.com");

              xnx.setAge(1);

              xnx.xuenixiang();

       }

}

 

没有显示调用父类构造方法,所以父类的无参构造方法被默认加载

显示的调用父类的有参构造方法

更详细的原理和步骤参考这两篇文章

https://blog.csdn.net/u011080472/article/details/51330114

https://blog.csdn.net/whut2010hj/article/details/81330381

 

 

猜你喜欢

转载自blog.csdn.net/qq_41917908/article/details/88534982
今日推荐