我想访问超类中的实例变量x。我找不到它的语法。这有可能吗?
public class SuperBoss {
int x = 10;
}
public class Boss extends SuperBoss {
int x = 2;
public static void main ( String[] args ) {
Boss b = new Boss();
System.out.println(b.x); //prints out 2, I want it to print out 10
}我一直在尝试使用关键字"super“,但没有成功。
发布于 2013-04-29 07:47:12
是的,有一种方法。字段具有编译时绑定。您需要的是对SuperBoss进行强制转换:
public class SuperBoss {
int x = 10;
}
public class Boss extends SuperBoss {
int x = 2;
public static void main ( String[] args ) {
Boss b = new Boss();
System.out.println(((SuperBoss)b).x);
}
}发布于 2013-04-29 07:32:22
它打印出2,因为您在Boss中的int x = 2声明隐藏了SuperBoss中的x声明
通常,您可以使用super关键字显式地访问超类的public字段,但是这在static方法的static上下文中不起作用。您可以定义一个小帮助器函数来获取超类的x的值
public class Boss extends SuperBoss {
int x = 2;
public int getSuperX() {
return super.x;
}
public static void main ( String[] args ) {
Boss b = new Boss();
System.out.println(b.getSuperX()); //prints out 2, I want it to print out 10
}
}发布于 2013-04-29 07:39:11
据我所知(我可能应该在JLS中查找详细信息),使用super访问阴影的非私有字段是合法的,但只能从实例方法中访问。所以你可以这样做:
public class Boss extends SuperBoss {
int x = 2;
int getSuperX() {
return super.x;
}
public static void main (String[] args) {
Boss b = new Boss();
System.out.println(b.getSuperX());
}
}https://stackoverflow.com/questions/16269163
复制相似问题