【JAVA】(继承)子类中super关键字

super关键字的使用

通过子类对象访问一个方法:首先在子类成员范围找,再到父类成员范围找;override之后想要调用父类的同名方法,可以使用super.方法名()

public class Fu {

    public void show(){
        System.out.println("父类中show()方法被调用");
    }
}
public class Zi extends Fu {

    public void method(){
        System.out.println("子类method()方法被调用");
    }

    @Override       //用来表示这个方法是继承父类的
    public void show(){
    	//使用super直接调用父类中的show()方法
        super.show();
        System.out.println("子类中show()方法被调用");
    }
}
public class SuperTest {
    public static void main(String[] args) {
        //创建对象
        Zi z = new Zi();
        z.method();
        z.show();
    }
}

打印结果:

子类method()方法被调用
父类中show()方法被调用
子类中show()方法被调用

super内存管理

在mian中创建Zi类对象,
第一步:在栈内存中申请空间存放对象“z”在堆内存中的地址,
第二步:接下来初始化子类中的成员变量(在堆内存中就存储好了子类中的成员变量),
第三步:然后默认访问子类中的无参构造方法,访问子类的无参构造方法的过程中会优先访问父类的无参方法,
第四步:接下来到父类中先初始化父类中的成员变量(在堆内存中开辟super空间存储好了父类中的成员变量),
第五步:接着访问父类的无参构造方法,父类无参构造方法访问结束后,接着返回子类中继续子类的无参构造方法的访问,结束后继续其他的方法的访问(依次进栈出栈)
最后:main结束从栈中退出。

public class Fu {

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

    public void show(){
        System.out.println("父类中show()方法被调用");
    }
}
public class Zi extends Fu {

    public Zi(){
        System.out.println("来自子类的无参");
    }

    public void method(){
        System.out.println("子类method()方法被调用");
    }

    public void show(){
        super.show();
        System.out.println("子类中show()方法被调用");
    }
}
public class SuperTest {
    public static void main(String[] args) {
        //创建对象
        Zi z = new Zi();
        z.method();
        z.show();
    }
}

显示结果:

来自父类的无参
来自子类的无参
子类method()方法被调用
父类中show()方法被调用
子类中show()方法被调用

你可能感兴趣的:(【JAVA】(继承)子类中super关键字)