如何在OOM中设计此案例

时间:2013-07-28 19:27:01

标签: java oop inheritance

我想做这样的事情:

我有什么:

  1. A(通用类),可能为空。

  2. 课程A的具体实施:A1A2A2

  3. 现在有一个驱动程序,我有一个通用的方法:

    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中实现它?

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

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

1 个答案:

答案 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();
    }
}