【发布时间】:2013-09-11 07:03:50
【问题描述】:
我有一个域类,它有很多子类,如下所示(B 是接口类型,B1 和 B2)实现 B 接口。
正如您在我的主课中看到的,它需要强制转换 (B1 b1 = (B1) a.getB();) 并且我们知道它可以是 B1 或 B2,所以据我所知应该没问题。
我的问题是类型可以增长很多,使用A的人需要设置更多条件来检查B的实例并访问B1或B2的具体值...... 有什么办法可以跳过这个强制转换,这样可以减少未来的很多条件
public class TestMain
{
public static void main(String[] args)
{
A a = new A();
//this can be B1 or B2
B1 b1 = (B1) a.getB();
}
}
public class A
{
private B b;
protected B getB()
{
return b;
}
protected void setB(B b)
{
this.b = b;
}
}
public interface B
{
void test();
}
public class B1 implements B
{
@Override
public void test()
{
// TODO Auto-generated method stub
}
}
public class B2 implements B
{
@Override
public void test()
{
// TODO Auto-generated method stub
}
}
【问题讨论】:
-
您在寻找
instance of关键字吗? -
为什么需要将 B 实例转换为特定的子类型(B1、B2 等...)?拥有一个通用接口的想法是只使用该接口的方法。如果在某些情况下您需要使用某个实现类独有的方法,则必须对其进行强制转换(在使用
instanceof检查其类型之后)。
标签: java oop casting polymorphism