h22*_*h22 3 java oop inheritance
我有一些类X与外地A的吧.它是一个final结构域,在构造函数中初始化.现在我有一个派生类Y,其中该字段必须始终B是派生自的类的实例A.问题是,类Y需要调用一些特定的方法,这些方法只能在B类上使用,而不能在它的祖先上使用A.
我看到几个解决方案:
A,继承自X类和类内部Y,强制转换A为B.这使我的代码充满讨厌的类型转换.B.现在没有类型转换,但我们有两个略有不同类型的字段,必须始终保持相同的值 - 也感觉不太好.B提供的所有方法A,throw NotImplementedException.这增加了一些奇怪的方法,故意在那个课程中毫无意义.哪种方式最适合这个领域?或者其他一些,更好的存在?我认为这不是特定于语言的,但我必须在Java中使用.
X类型应该是泛型类型:
public class X<T extends A> {
protected T a;
public X(T a) {
this.a = a;
}
}
public clas Y extends X<B> {
public Y(B b) {
super(b);
}
public void foo() {
// here, this.a is of type B, without any type cast.
}
}
Run Code Online (Sandbox Code Playgroud)