1
我不确定这些问题是否仍然适合被问,因为可能已经有答案。但是当涉及父类和子类关系中的属性时,我仍然不理解继承的概念。请注意下面的例子。Iinherited字段的值不会更改
class Animal{
public int lifeSpan = 50;
public String imAn(){
return "I'm an Animal";
}
}
class Elephant extends Animal{
public int lifeSpan = 100;
public String imAn(){
return "I'm an Elephant";
}
}
public class Test{
public static void main(String args[]){
Animal animal = new Elephant();
System.out.println(animal.imAn()+" and i live around "+animal.lifeSpan+" years");
}
}
答案将是:我是大象,我生活在50年左右。
我明白这里的虚拟方法调用概念,但是什么使得它不会加载子类的lifeSpan属性。这是否意味着类属性不是多态的?
我可以看到上述问题的更好的实现。谢谢你的解释。但是我完全觉得如果它的隐藏属性的范围是无用的。林不知道,但是,在这种情况下,java应该提供一个编译时错误。我非常欣赏你限制可变私人决赛的方式。 – 2014-09-27 07:19:01
@KumarKailash:它为什么会给编译时错误 - 和*哪里*?请注意,任何具有“Elephant”类型表达式的代码都将使用在“Elephant”中声明的字段,任何具有“Animal”类型表达式的代码都将使用在“Animal”中声明的字段。从根本上说,问题是你有两个领域,但只有一个信息。有时候它可能会使层次结构中的两个类都具有相同名称的字段 - 但是如果你的字段是私有的(因为我相信它们几乎总是),它不会成为一个问题。 – 2014-09-27 07:24:13
非常感谢。非常有说服力。是的,我同意在层次结构中具有相同名称的字段没有任何问题。 – 2014-09-27 07:29:07