我的复习之路:Java构造函数之子父类关系

太久没有写代码了,目前准备重新做回Java程序员,最近一直在复习Java的基础知识。古人一直都在说温故而知新,在重新学习Java的过程中我已经深切感受到古人所说的真谛。今天就子类和父类之间的构造函数的调用关系简单谈一下我的认识,有不足的地方烦请指出。
1.在Java中每一个类必须拥有构造函数,构造函数是其在实例化的时候调用。
2.在类中你可以显示的指定一个或多个构造函数。你也可以不指定的构造函数,这个时候Java在后台会默认指定一个无参的构造函数。
如果你显示指定了构造函数那么Java不会再在后台默认指定一个无参的构造函数。
3.子类中的构造函数中第一行必须调用父类的构造函数。
4.子类中的构造函数中第一行你可以显示指定调用父类的那个构造函数,也可以不显示指定。
不显示指定的时候Java在后台默认调用super()来调用父类的无参构造函数。
5.如果父类中没有无参构造函数,而且子类中又没有显示指定调用父类的其他构造函数时候,Java编译不通过。

情况一:
public class A {
    
    public A(){
        System.out.println("A的无参构造函数");
    }
    
    public A(int arg){
        System.out.println("A的有参构造函数");
    }
}

public class B extends A{
    
    public B() {        
        System.out.println("B的无参构造函数");
    }

    public B(int arg) {        
        System.out.println("B的有参构造函数");
    }
}

public class Control {

    public static void main(String[] args) {
        B b = new B();
        B c = new B(1);
    }
}
运行结果:
A的无参构造函数
B的无参构造函数
A的无参构造函数
B的有参构造函数

情况二:
将父类A的无参构造函数注释掉
public class A {
    /*
    public A(){
        System.out.println("A的无参构造函数");
    }*/
    
    public A(int arg){
        System.out.println("A的有参构造函数");
    }
}
这个时候子类B要做出相应调整,不然编译不通过,因为在子类B
的构造函数里的第一行默认调用了父类A的无参构造函数,而此时
父类A的无参构造函数已经被注释掉,所以子类B找不到父类A的
无参构造函数,所以报错。现在将子类B进行相应的调整,如下:
public class B extends A{
    
    public B() {
        super(1);
        System.out.println("B的无参构造函数");
    }

    public B(int arg) {    
        super(arg);
        System.out.println("B的有参构造函数");
    }
}

contorl类不做调整。

运行结果:
A的有参构造函数
B的无参构造函数
A的有参构造函数
B的有参构造函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值