【发布时间】:2014-09-06 06:45:52
【问题描述】:
假设你有两个类如下:
class A{
static int statint = 5;
int instanceint = 5;
public void instanceMethod(){}
public static void staticMethod(){}
}
class B extends A{
static int statint = 6;
int instanceint = 6;
public void instanceMethod(){}
public static void staticMethod(){}
}
然后你实例化如下:
public static void main(String[] args){
A basa =new B(); //child(B) stored as parent(A) type
int i=basa.statint; /**gives you (child)B's static data member (6)**/
int j=basa.instanceint; //gives you (parent)A's instance data member (5)
basa.instanceMethod(); //calls (child)B's instanceMethod() version.
basa.staticMethod(); /**call's (parent)A's staticMethod() version.**/
}
我的问题是:为什么子类的静态方法可以隐藏父类的静态数据成员,而不能隐藏父类的静态方法?我认为两者都不是或两者兼而有之。
(我知道解决这个问题的方法 - 例如,对于静态数据成员/方法访问,使用 ClassName.datamember 或 ClassName.method() 表示法以确保调用正确的版本,例如变量,明确地将孩子降级为访问变量时存储在子类型中,和((B)basa).instanceint;一样,获取B的实例数据成员——
我的问题更多是因为我自己理解为什么隐藏静态数据成员和从实例访问的隐藏静态方法的默认值似乎不一致。)
【问题讨论】:
-
它没有。你错了。
标签: java inheritance static