super与构造方法

我先把题目贴出来,一点都不懂的就看我对照这几个题讲解super再联系后面的习题

class Super {
    public Super() {
        System.out.println("Super()");
    }

    public Super(String str) {
        System.out.println("Super(String)");
    }
}

public class Sub extends Super {

    public Sub() {
        super();
        System.out.println("Sub()");
    }

    public Sub(int i) {
        this();
        System.out.println("Sub(int)");
    }

    public Sub(String str) {
        super(str);
        System.out.println("Sub(String)");
    }

    public static void main(String[] args) {
        Sub s1 = new Sub();
        Sub s2 = new Sub(10);
        Sub s3 = new Sub("hello");
    }
}

不要说我不写测试类哇,我这个是为了方便在这里插入图片描述

首先子类继承父类

子类继承父类的话会先实现父类的构造方法!!!及时不写super();都会优先实现父类的无参构造

Sub s1 = new Sub();当读到这一条时应该先实现Super的无参构造

System.out.println(“Super()”);

再实现Sub的无参构造

System.out.println(“Sub()”);

Sub s2 = new Sub(10);中有一个int类型的参数

那我们回过头去找找

 public Sub(int i) {
        this();
        System.out.println("Sub(int)");
    }

大家可能有问题这个this()是个啥
在这里插入图片描述
this() 大家看里面是没东西的,那么他指的是子类的还是父类的呢?
他这里的this()应该指的是就近的无参构造就是Sub()
!!!那么调用了Sub()那就要实现Sub()的父类无参构造不然没有爸爸哪来的儿子
就把无参构造又走了一遍答案就是

System.out.println(“Super()”);
System.out.println(“Sub()”);

再看到 Sub s2 = new Sub(10);他父类没有int 参数的方法那就直接执行呗

System.out.println(“Sub(int)”);

最后:
**Sub s3 = new Sub(“hello”);**子类和父类中都有String类型的就有是先执行父类构造方法再执行子类构造方法咯

System.out.println(“Super(String)”);

System.out.println(“Sub(String)”);

所以最后答案显而易见咯

//Super()
//Sub()
//Super()
//Sub()
//Sub(int)
//Super(String)
//Sub(String)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值