java – 只有抽象方法和接口的抽象类 – 我应该使用哪个?
作者:互联网
参见英文答案 > Interface vs Abstract Class (general OO) 33个
请注意.这个问题不是抽象类与接口类型的问题.
是.我知道.扩展抽象类的类不必覆盖所有未实现的方法.如果子类没有给它的一些父实现的未实现方法定义,那么子类也将被认为是抽象的.
但是实现接口的类应该实现其所有方法(也可以使用接口进行多重继承).
这是仅具有抽象方法的抽象类与接口之间的唯一区别吗?
是的我明白. Abstract类可以具有状态和方法实现.
但我提出的问题非常清楚.它实际上不是一个接口与抽象类的问题.
这里,在问题中,抽象类没有任何数据成员或任何方法实现.只是一些抽象的方法.
例如:
abstract class shape{
abstract void draw();
}
我只是想知道是否还有其他差异.
在这种情况下我应该使用什么?
请帮忙.
解决方法:
我相信你的问题不一定是另一个,而是如何知道在一个实例中选择哪一个.
我喜欢考虑的一种方式是接口往往是用户可以与类接口的动作.例如,如果一个类实现了可玩的界面你知道它会有一个播放方法,无论是启动音频播放器,启动视频,还是开始游戏都取决于类本身,但你只知道它是一个可玩的类并且可以玩.
而形状不是动作,它是一种类型,形状带有属性来定义它,你需要知道颜色,大小等,以便知道某些形状.这就是为什么我会使用抽象类来定义它们共有的所有属性.
因为draw()是可以应用于形状,图像或场景的功能,所以我将其实现为Drawable接口.
例:
public class Square extends Shape implements Drawable{
public void draw(){
//draw code here
}
}
这样,您可以定义Shape内部的所有常用属性,并提供通过Drawable接口绘制自身的功能.
标签:design-principles,java,interface,abstract-class,design-patterns 来源: https://codeday.me/bug/20190728/1559260.html