2013-10-21 101 views
2

这里是我的代码这里的继承发生了什么?

class Animal{ 
    public int numOf=3; 
} 

class Dog extends Animal{ 
    public int numOf=4; 
} 
class TestCase{ 
    public static void main(String[] args){ 
     Animal a = new Dog(); 
     Dog d = new Dog(); 
     System.out.println(a.numOf); 
     System.out.println(d.numOf); 
    } 
} 

当我做a.numOf,应该不会是4,因为这将是一个方法的情况下?

+8

你不重写字段,只是方法。换句话说,你不会覆盖状态,只是行为。 –

+0

@RohitJain为什么字段没有被覆盖?或多态? – UnKnown

回答

7

多态性不适用于字段。

一个字段根据其访问的变量的声明类型进行解析。

System.out.println(a.numOf); // refers to A's, since a's declared type is A 
System.out.println(d.numOf); // refers to D's, since d's declared type is D 

您在这里遇到hiding的情况。

+2

Sotirios,我们得谈谈你在所有这些Java问题上打败我! –

+0

@RichardJPLeGuen LOL。聊天窗口已打开。去为它;-) –

+3

@RichardJPLeGuen beatin'将继续,直到我满意(和/或在工作中有事要做)。 –

相关问题