Java_41_面向对象_继承_super_构造器的调用_继承的内存分析(非常重要)

super

super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。

普通方法中:

没有顺序限制,可以随便调用。

构造方法中:

除了Object类之外其他所有类的构造方法第一句总是super(......)

任何类的构造方法中,若是构造方法的第一行代码没有显式调用super(......),那么Java默认都会调用super(),所以你这里的super(),加不加都无所谓 。

public Test(this,super){......} this指当前对象,super指父类对象 || 这两个都是隐式参数

 

 

多层继承(子类-父类-爷爷类...)

今天突然看到了一个两层继承的类,他重写了父类的一个方法,而父类的中的方法又是从爷爷类中重写下来的,顿时蒙圈了。于是自己写了个最简单的例子试验了一下,做个记录。 
原理很简单ClassA中有一个方法onCreate(),ClassB继承ClassA,ClassC继承ClassB,并且都重写了这个方法,执行ClassC中的onCreate(),看看输出什么就是了。

public class ClassA {

    protected void onCreate(){
        System.out.println("It's ClassA's sysout");
    }

}
  •  
public class ClassB extends ClassA {

    @Override
    protected void onCreate() {
        System.out.println("It's ClassB's sysout");
        //super.onCreate();
    }
}
  •  
public class ClassC extends ClassB {

    @Override
    protected void onCreate() {
        System.out.println("It's ClassC's sysout");
        super.onCreate();
    }

}
  •  

之后增加一个Main类

public class Main {
    public static void main(String[] args) {
        ClassC c = new ClassC();
        c.onCreate();
    }
}
  •  

第一遍执行的时候注释了ClassB中的super.OnCreate();执行结果为:

It's ClassC's sysout
It's ClassB's sysout
  •  

可以看到只执行了 直接父类 ClassB中的onCreate()方法,并没有执行ClassA中的方法。 
第二遍执行的时候放开ClassB中的注释,执行结果为:

It's ClassC's sysout
It's ClassB's sysout
It's ClassA's sysout
  •  

执行了ClassA中的OnCreate(); 
另外之前有个概念一直不清晰,子类重写父类方法时,访问级别可以扩大但不能缩小。比如父类是protected,子类可以写成public。 
访问级别:

修饰符本类同一个包子类其他包
public
protected×
friendly××
private×××

方法修饰符为默认(friendly)时,同一个包下的子类可以重写父类方法,其他包下的子类不能重写父类方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr_Pmc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值