[英]How to access a field from a class?
如何在meth3()
访问AA
类的'i'变量? 我尝试调用super.i
但它只是调用BB
类的i
变量。
public class SuperTest {
public static void main(String[] args) {
CC cc = new CC();
cc.meth3();
}
}
class AA {
int i=10; // **I mean this variable to access somehow**
}
class BB extends AA{
int i=20;
void meth2(){
System.out.println(super.i);
}
}
class CC extends BB{
int i=30;
void meth3(){
System.out.println(super.i);
}
}
您可以将this
转换为AA
以从AA
读取i
:
class CC extends BB {
int i = 30;
void meth3() {
System.out.println(((AA) this).i);
}
}
版画
10
public class Test {
public static void main(String[] args) {
CC cc = new CC();
cc.meth3();
}
}
class AA {
int i = 10; // **I mean this variable to access somehow**
}
class BB extends AA {
int j = 20;
}
class CC extends BB {
int k = 30;
void meth3() {
System.out.println(i);
System.out.println(j);
System.out.println(k);
}
}
输出量
10
20
30
当一个类扩展另一个类时,它将继承原始类的所有非私有变量。 因此,让我们将BB
类重写为编译器可能看到的样子(我将编写伪代码来说明这一点):
class BB extends AA{
int i = 10;//inherited from AA
int i = 20;
}
现在通常,如果我们编写了一个包含两个变量的类,这两个变量都具有相同的名称(在本例中为i
),则会出现编译错误。 但是在扩展类的情况下,任何与从原始类继承的变量具有相同名称的变量将被覆盖。 AA
类的原始i
被BB
类的i
覆盖。 这称为名称隐藏或名称隐藏。 看到这个更深入的解释 。
如果要从BB
或CC
实例访问AA
i
变量,则需要强制转换用于AA
类的对象。
这是您提供的测试类,根据您的要求重写了该类以访问AA
i
变量:
public class Test {
public static void main(String[] args) {
CC cc = new CC();
AA aa = (AA) cc;//cast the CC class instance to an AA instance
aa.i;//equals 10
cc.i;//equals 30
}
}
您应该了解引用之间的类对象。
无论如何
试试这个代码
public class SuperTest {
public static void main(String[] args) {
CC cc = new CC();
cc.meth3();
AA aa = new AA();
System.out.println(aa.getI());
}
}
class AA {
int i=10; // **I mean this variable to access somehow**
public int getI() {
return this.i;
}
public void setI(int i) {
this.i = i ;
}
}
class BB extends AA{
int i=20;
void meth2(){
System.out.println(super.i);
}
public int getI() {
return this.i;
}
public void setI(int i) {
this.i = i ;
}
}
class CC extends BB{
int i=30;
void meth3(){
System.out.println(super.i);
}
public int getI() {
return this.i;
}
public void setI(int i) {
this.i = i ;
}
}
super关键字允许您访问直接超类的变量...访问AA类的'i'值,您需要在CC类中调用meth2()...这将打印所需的值...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.