有一个抽象类A和一个接口B。有些类仅从类继承A,有些类从类继承A并实现接口B。有一种方法可以执行类A和接口中的方法B。如何实施该方法?我有几种选择,但它们都有缺点:
1 个选项
public void run(A a, B b) {
//код
}
缺点是你需要指定同一个类两次
选项2
public void run(A a){
B b = (B) a
//код
}
缺点是您可以将任何类继承人放入此方法中,A因此您可能会得到异常ClassCastException
选项3
班级
public class C extends A implements B {}
方法
public void run(C c){
//код
}
缺点是你需要创建一个空类
如果一个类和一个接口几乎彼此无关,但突然你仍然需要它们的组合(这种情况很少发生),那么你可以使用泛型:
但!
在大多数情况下,最好创建一个通用抽象类:
我想我明白你需要实施第四个选项
首先我们定义类
A如下:那么该方法可以定义为
也就是说,一个对象可以分为三种类型:
ABA实现B所有这些都适合该方法,除了:所有类都必须实现
B,因此必须将实现B添加到A默认值,在这种情况下可以在子类中重写它。