Java中的通用方法和继承

时间:2011-04-20 15:05:45

标签: java generics inheritance

让我们说C和D类扩展了B类,扩展了A类

我在E类中有一个方法,我希望能够使用对象C或对象D.我知道A类提供了我需要的所有方法。我怎样才能编写一个让我传递对象C或对象D作为参数的方法?

我认为我需要制作一个通用课吗?如果有的话,是否有人有更接近我需要的具体例子this,它似乎只告诉我如何使用现有的集合类?

4 个答案:

答案 0 :(得分:6)

class A {
  public String hello(){return "hello";}
}
class B extends A{}
class C extends B{}
class D extends B{}

方法hello在所有子类B,C和D中都可用。

所以在E中,做一些类似的事情:

private void test() {
  System.out.println(hello(new A()));
  System.out.println(hello(new B()));
  System.out.println(hello(new C()));
  System.out.println(hello(new D()));
}

public String hello(A a) {
  return a.hello();
}

您可以传递A,B,C或D

的实例

BTW - 在这种情况下不需要泛型(据我所知)

答案 1 :(得分:2)

如果CDA作为共同的祖先,而A提供了所有需要的方法,那么您的方法应该只采用A的实例作为参数。除非我误解了你的问题,否则你不需要通用的方法。

答案 2 :(得分:1)

public void doSomething(A input) {
  input.methodInA();
  input.secondMethodInA();
  ...
}

多态性将在C或D中运行可能被覆盖的代码实现,除了调用该方法之外,您不需要执行任何操作。

答案 3 :(得分:0)

class A { 

}

class B extends A { 


}

class C extends B { 


}

class D extends B { 

}

class E { 

    public void test ( A a ) { 
        // c or d will work fine here
    }

}