class B {}
class B1 extends B {}
class B2 extends B {}
class A {
B data;
B getData() {
return data;
}
void setData(B b) {
data = b;
}
}
class A1 extends A {
B1 data;
B1 getData() {
return (B1) super.getData();
}
void setData(B1 b) {
super.setData(b);
}
void setData(B b) {
if (!(b instanceof B1)) {
throw new ClassCastException();
}
super.setData(b);
}
}
class A<T extends B> {
private T b;
public T getB() {
return b;
}
}
class B {
}
class A1 extends A<B1>{
}
class B1 extends B{}
class A2 extends A<B2>{}
class B2 extends B{}
public class B {
}
public class B1 extends B {
}
public class B2 extends B {
}
public class A <T extends B> {
private T data;
public T getData(){ return data;}
public void setData(T data) {
this.data = data;
}
}
public class Main {
public static void main(String[] args) {
A<B1> a1 = new A<B1>();
A<B2> a2 = new A<B2>();
a1.setData(new B1());
a2.setData(new B2());
// .....
}
}
鄙人抽象思考能力有限,所以我还是得把
A和B两个类对应到具体的东西来思考:Arm(武器): Mauser(毛瑟), Rifle(来福), Revolver(左轮), Pistol(手枪)
Bullet: Gold, Silver (wow!!), Copper

@边城 我给出的解决方案使用了泛型,主要是提供另一种思路。不一定比不用泛型简洁。
由于业务相关信息在问题中不很清楚,我做个假设--除了持有之外,并不对B1,B2做customized的操作。
如果上面得假设不合理,请指出。我可以再改进方案。
根据业务功能拆分出接口来
给你一个参考方案,另外也可以考虑用泛型来处理。不管 Java 的泛型我不太熟,等其他高人了
这个采用泛型可以很好地解决问题
不知道这个是不是你要的:
使用泛型,A这边不需要继承结构。
按楼上的范型吧,不过也要注意范型的问题~~