|
原帖由 zjrstar 于 2008-9-1 16:51 发表 ![]()
楼主需要弄清楚两个概念:
1.重写(override)
2.隐藏(hidening)
而且还需要分清楚引用变量类型和对象实例类型。
对于SuperClass和SubClass的成员变量i来说属于属性隐藏,不是函数重写。所以不属于多态。
对于A类和B类也是,成员变量K是属性隐藏。
对于SuperClass和SubClass的成员函数test它符合函数重写的规则,所以它是多态,运行时识别,记住编译期间不管。
对于A和B的成员函数getNumber,display也是函数重写,也符合多态。
好了,认识完重写和隐藏后需要知道引用变量类型和对象实例类型。
引用变量类型就是SuperClass temp = new SubClass();A a = new B();中=号前面的那个变量。对象实例就是=后面创建的那个对象实例。
对于隐藏,它是跟随引用变量类型的类型取值,
对于重写,它是跟随对象实例的实际类型来调用的。
所以最终结果就是符合你写的那个结果,这就是JAVA的规则。
什么叫属性隐藏呢?请教了! |
|