为什么下面给出的代码打印父类的实例变量的值而不是子类的实例变量的值?

时间:2015-08-08 13:45:29

标签: java polymorphism

此代码打印" GenericAnimal",正如我期望它打印" PolymorphismTest"因为我创建了PolymorphismTest的对象。

item in getItems(searchText)

3 个答案:

答案 0 :(得分:0)

它被称为字段“隐藏”或“阴影”。您有一个与父类中的字段同名的第二个字段。如果父级中的那个是private,那么子类将无法访问它。

子类中的额外String name字段占用其自己的内存和引用。您可能应该重新使用父类的字段,使其可见(即protectedpublic范围)或添加protectedpublic访问者和mutator子类可以调用的父类来访问和操作该字段。

答案 1 :(得分:0)

因为您正在访问该字段,而不是该函数。第二个字段隐藏超类中的那个,而不是覆盖。这与函数的行为不同,这可能就是你在这里寻找的东西:

i

答案 2 :(得分:0)

您的GenericAnimal引用不能引用其子类PolymorphismTest的属性。不能在java中覆盖属性值,只能覆盖方法。

注意: 这根本不是隐藏的。 (那将是另一个参考方向。)