super_子类对象内存结构_继承树追溯

  1. super(超级的)“可以看做”是直接父类对象的引用。可以通过super来访问父类中被子类所覆盖的方法和属性。
  2. 使用super来调用普通方法,语句没有限制位置,可以在子类中随便使用。
  3. 在一个类中,若是构造方法的第一句没有调用super(...)或者this(...);那么Java默认都会调用super(),含义是调用父类的无参方法。

super关键字的使用:

public class TestSuper1 {
    public static void main(String[] args) {
        new ChildClass().f();
    }
}
class FatherClass{
    public int value;
    public void f(){
        value = 100;
        System.out.println("FatherClass.value=" + value);
    }
}
class ChildClass extends FatherClass{
    public int value;
    public int age;
    public void f(){
        super.f();//调用父类的普通方法
        value = 200;
        System.out.println("ChildClass.value=" + value);
        System.out.println(value);
        System.out.println(super.value);//调用父类的成员变量

    }
    public void f2(){
        System.out.println(age);
    }
}

继承树追溯:

属性/方法查找顺序:(比如查找变量h)

  1. 查找当前类中有没有属性h
  2. 依次上溯每个父类,查看每个父类中是否有h,直到Object
  3. 如果没有找到,则出现编译错误。
  4. 上面步骤,只要找到h变量,则这个过程中止。

构造方法调用顺序:

构造方法第一句总是:super(...)来调用父类对应的构造方法。所以流程就是:先向上追溯到Object,然后依次向下执行的初始化块和构造方法,直到前子类为止。

注:

静态初始化块调用顺序,与构造方法调用顺序一样,不在复用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值