1

我想做这样的事情:

我有的:

  1. A(一个通用类),可能是空的。

  2. 类的具体实现AA1, A2, A2.

现在有一个驱动程序,其中我有一个通用方法:

Class Driver()
 doSomething(A a)
    {
      a.setVal1();
      a.setVal2(); 
      .....
      etc.
    }
 main()
 {
   A a;
   if(user_input == "a1")
       a= new A1() 
       //Intention is, I should be able to access all the variables and methods of A1 & A(if any)
   else if(user_input == "a2")
       a= new A2()
       //Intention is, I should be able to access all the variables and methods of A2 & A(if any)
   doSomething(a);
 }

}

现在,这里a可以是a= new A1a= new A2(在运行时决定)。

如何在 Java 中实现这一点?

注意: class a1(或a2)可能有自己的变量(和/或方法)&我不想把它们放在 class 中A

任何指针/帮助将不胜感激。

4

1 回答 1

1

请记住,当您将方法的签名声明为 时doSomething(A a),您将只能使用引用调用其中定义的方法A或其超类(如果可访问)中的方法a

但是,在调用特定于该子类的方法之前,可以显式转换 a为其中一个子类的对象。在这种情况下instanceof建议使用

例如:

doSomething(A a) {
    if (a instanceof A1) {
        A1 a1 = (A1) a;
        a1.methodSpecificToA1();
    } else if (a instanceof A2) {
        A2 a2 = (A2) a;
        a2.methodSpecificToA2();
    }
}
于 2013-07-28T19:53:08.393 回答