Java-继承中的构造方法

规则:
子类的构造的过程中必须调用其基类的构造方法
子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法
使用this(argument_list)调用本类的另外的构造方法
如果调用super,必须写在子类构造方法的第一行
如果子类的构造方法中没有显示地调用基类构造方法,则系统用默认调用基类无参数的构造方法
如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参的构造方法,则编译出错

接下来我们通过一段程序来验证这几条规则

	class SuperClass{
		private int n;
		
		SuperClass(){
			System.out.println("SuperClass()");
		}
		
		SuperClass(int n){
			System.out.println("SuperClass(" + n +")");
			this.n = n;
		}
	}
	
	class SubClass extends SuperClass{
		private int n;
		
		SubClass(int n){
			System.out.println("SubClass(" + n + ")");
			this.n = n;
		}
		
		SubClass(){
			super(300);
			System.out.println("SubClass()");
		}
	}
public class TestSuperSub {
	public static void main(String[] args) {
		SubClass sc1 = new SubClass();//1
		SubClass sc2 = new SubClass(400);//2
	}
}

如果我们把父类SuperClass 中的SuperClass构造方法和子类SubClass 中的SubClass中的super(300)注释掉 会发生什么呢?
在这里插入图片描述
这时报错了,由此证明了一个道理:在子类构造过程中,必须调用父类的构造方法

这里把注释掉的内容全部恢复,再对SubClass方法进行改动

 SubClass(){
		
			System.out.println("SubClass()");
			super(300);}

在这里插入图片描述
这个就已经很明显的解释了

现在将语句1(程序中有注释)暂时注释掉,运行一下程序
运行结果:
在这里插入图片描述
看一下程序,明明SubClass并没有对父类调用构造方法,为什么还会输出SuperClass()语句呢?
这里验证了一个规则: 如果子类的构造方法中没有显示地调用基类构造方法,则系统用默认调用基类无参数的构造方法
所以相当于:

 SubClass(int n){
 			super();
			System.out.println("SubClass(" + n + ")");
			this.n = n;
		}

系统自动调用了父类无参数构造方法也就是super()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值