抽象类VS. Java中的[Interface + Inheritance]

时间:2017-09-04 12:41:52

标签: java inheritance interface abstract-class

在Java的上下文中,类可以通过扩展另一个非抽象类并实现一个接口来替换扩展抽象类的需要,这两个类合并了抽象类的所有方法(抽象和实现) ?

1 个答案:

答案 0 :(得分:2)

  

在Java的上下文中,一个类可以取代扩展的需要   通过扩展另一个非抽象类来抽象类   实现一个接口,两者结合在一起   抽象类的方法(抽象和实现)?

可以吗?是

应该吗?否

抽象类可以用具体的类替换,但是你将改变你的系统。

请记住:抽象类不能实例化,也不应该实例化,因为它不具备足够的具体性。对您的业务有意义。 (如果确实如此,它不应该是一个抽象的类开始)

如果你使具体化,你冒险开发人员将使用(应该是什么)抽象类的实例。

如果您按照提议的方式进行更改:

public void doSomething(MyAbstractClass instance){
  // here we know there is an implementation provided by a subclass
}

会变成

public void doSomething(MyShouldBeAbstractClass instance){
  // here they can pass instances of the base class, which might have unsupported methods
}

例如:

public String getConcreteInformation(){ 
  throw new UnsupportedOperationException("Should be called on a child class");
}

并可能导致许多令人讨厌的错误