我想做这样的事情:
我有什么:
A
(通用类),可能为空。
课程A
的具体实施:A1
,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 A1
或a= new A2
(在运行时决定)。
我如何在Java中实现它?
注意:课程a1
(或a2
)可能有自己的变量(和/或方法)&我不想把它们放在课堂上A
。
任何指针/帮助将不胜感激。
答案 0 :(得分: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();
}
}