在下面的代码中,我将 A 的一个子类的实例化传递给方法“testmethod(),名为 B
不幸的是,该方法的签名接受超类 A 而不是子类 B 并且我无法更改该签名,因为它被许多类引用。
有没有一种方法(不更改 testmethod() 的签名)可以从 testmethod() 中访问 var2 变量,该变量是传递给 testmethod 的对象的一部分?
public class test5 {
public static void main(String args[]){
B b = new B();
testmethod(b);
}
public static void testmethod(A a2 ) {
System.out.println("in testmeth->" + a2.getVar1() ); // WORKS
System.out.println("in testmeth->" + a2.getVar2() ); // DOESNT WORK
}
}
class A {
int var1 = 2;
public int getVar1() {
return var1;
}
}
class B extends A {
int var2 = 8;
public int getVar2() {
return var2;
}
Run Code Online (Sandbox Code Playgroud)
你可以这样投射:
if(a2 instanceof B)
System.out.println("in testmeth->" + ((B) a2).getVar2() );
else
System.out.println("in testmeth->" + a2.getVar1() );
Run Code Online (Sandbox Code Playgroud)