当前页面: 开发资料首页 → J2SE 专题 → 属性的继承
属性的继承
摘要: 属性的继承
class 父
{
public String 辈分 = -#34;长辈-#34;;
}
class 子 extends 父
{
public String 辈分 = -#34;晚辈-#34;;
}
class test
{
public void main(String arg[])
{
父 test = new 子();
System.out.print(test.辈分);
}
}
得到的结果是“长辈”。要想得到“晚辈”,应该怎么修改?谢谢!
class test
{
public void main(String arg[])
{
子 test = new 子();
System.out.print(test.辈分);
}
}
汗,如果不修改test类,只能修改父或者子,应该怎么修改?
除非你现在的 父 类有 辈分=-#34;晚辈-#34; 这个属性
意思是子类不能重载父类的属性吗?
属性是不能重载的,你那么做的话就是两个没有联系的辈分
不能重载属性那多不方便啊!要是父类的方法要调用一个final属性,子类又不能重载它,岂不是很郁闷?
原因是用父类对象创建子类对象时,子类对象不能引用到父类中不存在的属性和方法,子类方法覆盖父类中方法是将调用子类的方法。我知道这么用
等待详细讲解
那你可以把属性变成方法啊....
辈份=XXX
就变成get辈份()
{retrun XXX}
super().辈分
赞成 liang8305(菜鸟!舍我其谁?)
用方法好, 不要直接访问变量
这里好像牵涉到属性的隐藏。
子类变量对同名父类变量的隐藏。
smartman_jc()
你说的隐藏是怎么回事?这里实际上就是希望隐藏父类的属性。能隐藏吗?
可以这样修改
class 父
{
public String 辈分 = -#34;长辈-#34;;
}
class 子 extends 父
{
//在子类的构造函数中修改父类的属性
public 子() {
super.辈分 = -#34;晚辈-#34;;
}
}
class test
{
public void main(String arg[])
{
父 test = new 子();
System.out.print(test.辈分);
}
}
playp((点来看看)) :
注意我的 辈分 属性是 static final 的,这样的话是不能修改的。
设置属性为private,在写一个get()方法。。。。达到隐藏的目的 ··
如:
class 父
{
private String 辈分 = -#34;长辈-#34;;
Public String get辈分(){
return this.辈分;
}
}
这样就可以用子类覆写父类的方法 ····
注意我的 辈分 属性是 static final 的,这样的话是不能修改的。
__________________________________
static final?? 那就是个常量呢。。 只属于本类,所有本类型对象共享。
属性能被继承,如果子类重新定以自己的属性,就隐藏了父类属性。(儿的体重总不能强制和父亲一样吧)
父 test = new 子();
System.out.print(test.辈分);
————————这里的引用变量是父类型的,可以(test instanceof 父)测试下.
所以是父类属性。
我觉得因为当字类继承父类时,因为是继承的是非private修饰成员变量,所以就出现了信息隐藏,也就是父类的属性值依然在内存中,没有被释放,因此当父类对象引用他的时候。对象将调出内存中的父类的属性值,因此不示子类 的值,要象改变父类的属性值。可以用方法的重载。他是释放了父类方法的。而只有子类的方法!
大家说的都有道理,wenqin2006() 的解释很清楚。非常感谢。
看来要想子类覆盖父类的常量,最好还是重载父类的get方法。