日期:2014-05-20  浏览次数:20741 次

java继承中,为什么成员变量可以隐藏,而方法不可以了?反过来,为什么方法可以覆盖而成员变量不可以了?
如题:
希望各位大牛们,多说点啊

------解决方案--------------------
第一个问题。当父类把方法用private修饰了, 这算不算隐藏了父类的方法???
第二个问题,方法可以覆盖,当你子类定义的成员变量和父类的成员变量同名同类型的时候,这算不算覆盖??
调用的时候如果想调用父类的成员变量得加上super关键字。
------解决方案--------------------
1. 关于LZ提的类似名字重用的问题,我觉得可以从什么是继承、什么是属性、什么是方法考虑。
子类可以隐藏父类的成员变量;覆写父类的方法:
因为隐藏不是覆盖,父类的成员变量还是被继承过来了,只是被隐藏了;
如果换种提法:子类的成员变量覆盖父类的成员,显然子不类父啊!
 
2. 子类的静态方法是可以隐藏其父类同名的静态方法的。
------解决方案--------------------
我的理解是这样的
成员变量的选择是通过静态绑定的,也就是在编译期间决定,也就是通过引用变量决定,而不是通过实际对象决定,
比如
class A{
public int t; //为了突出问题,所以这里用Public
}
class AA extends A{
public int t;

那么
A a = new AA();
那么这个时候,a就是引用变量,真正的对象时new AA()创造的对象,成员变量的选择是由引用类型决定
这个时候,a.t就是代表父类中的成员变量,
这就是所谓的静态绑定,所以也就是出现了隐藏,相同道理,static方法也有隐藏的现象,
而普通的方法,则是动态绑定了,也就是由对象类型决定,而不是引用类型决定了,这就是哦我们平时所说的多态
楼主,可以不用给太多分的
------解决方案--------------------
探讨

引用:

1. 关于LZ提的类似名字重用的问题,我觉得可以从什么是继承、什么是属性、什么是方法考虑。
子类可以隐藏父类的成员变量;覆写父类的方法:
因为隐藏不是覆盖,父类的成员变量还是被继承过来了,只是被隐藏了;
如果换种提法:子类的成员变量覆盖父类的成员,显然子不类父啊!

2. 子类的静态方法是可以隐藏其父类同名的静态方法的。

我觉得隐藏和覆盖只是一个分……

------解决方案--------------------
确认的

There are methods that a subclass cannot override. For example, in Java, a method that is declared final in the super class cannot be overridden. Methods that are declared private or static cannot be overridden either because they are implicitly final. It is also impossible for a class that is declared final to become a super class.

http://en.wikipedia.org/wiki/Method_overriding