在Java中继承和标识对象类型

时间:2012-06-24 00:28:45

标签: java inheritance polymorphism subclass abstract

好的,所以我正在开发一个带抽象类A的项目。假设类a1,a2和a3都继承自A类,并且有一些其他方法可能对每个子类都是唯一的。现在,由于用户交互,这些对象可以与其他对象配对,但是只有某些类型的对象可以配对,即,对象B只能使用a1,对象C只能使用a2,并且用户可以尝试配对他们否则会告诉他们他们不能。我当然希望避免使用,因为这在很大程度上是不好的做法,但我认为我现在有一个相当讨厌的脑胀气病例。我想在父类中添加一个getType()或一些这样的方法来返回一个对每个子类唯一的字符串,但这感觉很糟糕。抓住课程名称的感觉大致相同。我的OO和多态原理有点生疏,所以欢迎提出建议。

2 个答案:

答案 0 :(得分:2)

如果您真的没有使用instanceof,并且由于某种原因,您不能为实例类之外的配对定义参数,请向抽象类添加一组新方法,用于执行以下两项操作之一:

a)方法worksWithTypeB,worksWithTypeC等,根据需要在子类中定义它们。然而,这很像是类型测试。

b)将类型B和C使用的方法转移到抽象类;通常在B和C可以使用的类中定义它们(所以假设类型B使用a1.methodB,类型C使用a2.methodC),但定义它们以引发异常,在方法中不会否则存在(因此a1.methodC抛出异常,a2.methodB也是如此)。

虽然正如ilcavero所说,在这种情况下,类型检查并没有什么问题。

答案 1 :(得分:0)

我正在考虑使用泛型来解决这个问题。

要做到这一点,您需要定义一个通用存储两个值的类,如

class Pair< k,v扩展A>

现在,您可以将所有类型的对添加到散列映射中。当需要一对那种类型时,你会得到它的名字。

缺点:

您必须将所有想要的对添加到容器中

您必须将一个名称与

相关联

请注意,这将是一个糟糕的解决方案。