我应该如何调用实现抽象方法的实例

时间:2014-03-24 02:46:15

标签: java eclipse subclass abstract

我有一个抽象类和一个类,它扩展了它并实现了方法,而没有添加自己的其他方法。 让我们调用类A和B. B扩展A.我应该像这样创建一个B类实例

A newInstance = new B();

或者像这样

B newInstance = new B();

它有什么不同,哪种更好?

2 个答案:

答案 0 :(得分:0)

  

它有什么不同,哪种更好?

编程到接口而不是实现它是优先的方式,在这里阅读更多 - > What does it mean to "program to an interface"?。不同之处在于,如果必须使用相同的合同更改实现,则必须遵循合同而不是实现,以确保只需更改对象创建部分。

在你的例子中,如果你这样定义

A newInstance = new B();

您只能使用A合约中可见的方法。

在这种情况下:

B newInstance = new B();

您可以使用B合约中显示的方法,并且由于B与IS-A的关系A,您也可以使用A方法。

答案 1 :(得分:-2)

为了可维护性,我会选择第二个:

B newInstance = new B();

显然,目前无关紧要,因为AB在字段和方法方面完全相同(根据您的说法)。

但是,请说您的课程B会发生变化。您添加方法或字段。如果您将新实例声明为A newInstance = new B(),则无法访问您在B中所做的更改。

就第二点而言,从外行人的角度来看,使用第二点更有意义。