java中继承与构造函数之间的关系

继承的对象会保存父类的成员,也包括父类所声明的变量。因此,在创建子类的新对象时,所有继承下来的构造函数也会被执行。执行子类的构造函数会先触发父类的构造函数,连锁反应一直到最上层的父类构造函数。父类的构造函数必须在子类构造函数之前结束。

super关键字的使用

在构造函数中只能使用super调用父类的构造函数。对super的调用必须是构造函数的第一个语句。在自定义的构造函数中调用super会把父类构造函数放在堆栈的最上方,然后一路执行到子类的构造函数。
example: 定义一个抽象类Animal

public abstract class Animal{
	private String name;
	public String getName(){
		return name; //父类定义了一个getter,会被子类继承
	}
	public Animal(String theName){
		name = theName;
	}
}

调用无参数的父类构造函数

example:

public class Duck extends Animal {
	int size;
	
	public Duck(int newSize){
		super(); //调用父类无参的构造函数
		size = newSize;
	}
}

如果我们没有调用super(), 编译器会自动加上super()的调用无参的父类构造函数。注意即使父类有多个构造函数,也只有无参的版本会被调用。

调用有参数的父类构造函数

public class Hippo extends Animal(){
	public Hippo(String name){
		super(name);//调用父类的有参的构造函数
	}
}

this关键字的使用

this用来从某个构造函数调用同一个类的另外一个构造函数(比如在无参的构造函数中调用同一个类中的有参的构造函数)。 this在java中可以看作是对对象本身的引用,只能出现在构造函数中,并且和super一样必须是第一行语句。每个构造函数可以选择super或者this,但不能同时调用两者。 应注意java中重载的构造函数只能用变量类型和数量区分,有相同的变量类型和数量的构造函数会被视为同一个构造函数从而无法通过编译
example:

class Hippo extends Animal{
	private String sex;
	public Hippo(){
		this("unknown");
	}

	public Hippo(String name){
		super(name);
		sex = "unknown";
	}
	public Hippo(String theSex, String name){
		super(name);
		sex = theSex;
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值