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方法也有隐藏的现象,
而普通的方法,则是动态绑定了,也就是由对象类型决定,而不是引用类型决定了,这就是哦我们平时所说的多态
楼主,可以不用给太多分的
[解决办法]