测试java继承中父类与子类的域与方法适用的误解勘正

java核心技术卷一p148

尽管在Manager类(子类)中没有显式地定义getName 和 getHireDay等方法,但属于Manager类的对象却可以使用它们,这是因为Manager类自动的继承了超类Employee中的这些方法

又认为

同样,从超类继承了name, salary, hireday,这三个域。这样一来,每个Manager类都包含了四个域(一个子类自己声明的bonus域)

因为误解书义,我在实际使用中存在一些疑惑,即子类构造器中通过关键字super调用的父类构造器,那么实例化的域究竟是属于超类的还是子类的?因为这个问题一直模棱两可,犯了很多错。

package inheritanceTest;
public class InheritanceTest {
	public static void main(String[] args) {
		ChildClass kid = new ChildClass("kid"); 
		FatherClass[] superclass = new FatherClass[3];
		superclass[0] = kid;
		superclass[1] = new FatherClass("father");
		superclass[2] = new FatherClass("father");
		
		//superclass[0].setX(10);
		//error
		
		kid.setX(10);
		//ok
		
		System.out.println("kid name is " +kid.getName() + " and superclass[0]=kid, its class is " + superclass[0].getClass());
		//kid can call the father_class method getName()
		// superclass[0] class is ChildClass (by getClass())
		
		for(FatherClass e : superclass)
			System.out.println("name is : " + e.getName() + ";   class is :" + e.getClass());
		
		System.out.println("We call name by child class :"  + kid.getOwnName());
		// ok, and print "child class own name"

			
	}
}
package inheritanceTest;
public class FatherClass 
	{
	private String name; 
		public FatherClass(String name) 
		{
			this.name = name;
		}
	public String getName() 
	{
		return name;
	}
}
package inheritanceTest;
public class ChildClass extends FatherClass {
	private int x;
	public String name = "child class own name" ;
	public ChildClass(String name) {
		super(name);
		x = 0;
	}
		public String getName()
		{
			return super.getName();
		}
		
		public void setX(int x) {
			this.x = x;
		}
		
		public String getOwnName() 
		{
			return name;
		}
}

小结
父类数组father[0] = child 子类,不会报错 ; Father[0].getClass() = class child 子类;
但是Father[0].childmeth 子类方法会报错。
super调用了父类构造器,实际上是完成了父类域的实例化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值