java中抽象类与[接口+继承]的比较

iyr7buue  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(397)

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

7uhlpewt

7uhlpewt1#

在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");
}

可能会导致很多讨厌的虫子

相关问题