标签:design-principles java interface abstract-class design-patterns
参见英文答案 > 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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。