站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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方法。


↑返回目录
前一篇: 一个公司的面试题,麻烦大家帮看看
后一篇: 高分求一个比较菜的问题的解决方法,请好心人进来看看。在线等。