在Java的上下文中,类是否可以通过扩展另一个非抽象类来代替扩展抽象类的需要,并一起实现一个接口,两者结合在一起具有一个抽象类的所有方法(抽象和实现)?
发布于 2017-09-04 12:48:06
在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");
}可能会导致很多讨厌的虫子
https://stackoverflow.com/questions/46037339
复制相似问题