您可以使用超类的对象访问子类变量吗?

Sar*_*rta 5 java inheritance

在下面的代码中,我将 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)

CMP*_*MPS 3

你可以这样投射:

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)

  • 这是真的,但是 OP 提到它被许多类使用,因此它可能在传递 A 实例时被使用。@tgkprog (2认同)