Java super和super()

super和super()

super代指父类,而super()代指父类无参构造函数。具体用法如下:

用super在子类中得到父类的成员变量

//父类代码
public class Fu {
    int age =50;
}

//子类代码
public class Zi extends Fu{
    int age = 22;

    public void show() {
        int age = 0;

        System.out.println(age);      
        System.out.println(this.age); 
        System.out.println(super.age);
    }
}

//测试类代码
public class Demo {
    public static void main(String[] args) {
        Zi zi1 = new Zi();
        zi1.show();
    }
}

输出结果如下:

结论

1、子类中的输出的age采取就近原则:局部变量>成员变量>父类成员变量
2、this指代本类,super指代父类


接下来说说输出的第一行“父类无参”是咋回事

用super()在子类中得到父类的构造函数

始终记得没有构造方法默认无参,自定义构造方法就没有默认的无参了(值得细品)

//父类代码
public class Fu {
    int age =50;

    public Fu() {
        System.out.println("父类无参");
    }

    public Fu(int age) {
        System.out.println("父类有参");
    }
}

//子类代码
public class Zi extends Fu{
    int age = 22;
    public Zi() {
        super(12);
        System.out.println("子类无参");
    }

    public Zi(int age) {
        super();//默认调用父类无参构造函数,可不写!!(不写的前提:父类 至少有   无参构造函数)
        System.out.println("子类有参");
    }
}

//测试类代码
public class Demo {
    public static void main(String[] args) {
        Zi zi1 = new Zi();

        Zi zi2 = new Zi(20);
    }
}

输出结果如下:

结论

1、父类至少有 无参构造函数时子类构造函数自动调用其父类无参构造函数( super() )。
2、若要调用父类有参构造函数需明写super(……)。

下课!

posted @ 2021-12-23 00:39  郑国荣  阅读(292)  评论(0编辑  收藏  举报