我最近开始想,当我可以做一个具有完全相同功能的接口时,为什么还要使用抽象类。请考虑以下内容:
abstract class abstractClass {
public int a;
public void printText(String str) {
System.out.println(str);
}
}
interface Interface{
public int a = 0;
public default void printtext(String str) {
System.out.println(str);
}
}
如果我有一个类实现这一点,我肯定会有一个整数a和一个方法printtext。
所以,我所看到的唯一区别是,通过接口,我创建的任何类都可以实现我想要的其他接口,但是通过扩展抽象类,我将不允许扩展更多的类。我为什么要选抽象类?我希望这个问题不是太宽泛,尽管我知道为什么有些人会这么认为。
需要考虑的几点:
>
接口直到Java8才有默认方法。
接口中的a
隐式为final
。接口不能定义公共可变字段。
接口不能有受保护的或包的方法;直到Java9才有私有方法。
抽象类没有这些问题。因此,当您需要做任何这些事情时(除了#1,现在缺省方法已经存在),您需要获取一个抽象类(可能除了它实现的接口之外)。
问题内容: 为什么要创建抽象或接口类,或者何时应使用抽象或接口类? 问题答案: 仅在声明类必须具有的方法和成员时,才使用接口。实现该接口的任何人都必须声明和实现该接口列出的方法。 如果你还想拥有默认实现,请使用抽象类。扩展抽象类的任何类都必须仅实现其抽象方法和成员,并且将具有抽象类其他方法的一些默认实现,你可以覆盖或不重写。 -编辑-忘了提,Earwicker提醒我 最后,你可以根据需要实现任意数
问题内容: 我想知道何时应该使用接口。 让我们考虑以下内容: 和: 我可以轻松实现它们,它们具有相同的功能…但是我也可以向车辆类中添加一些变量,这些变量可能应该在车辆中使用(maxSpeed,carType …) 使用接口的原因是什么? 谢谢! 编辑: 我在另一个线程中找到了关于它的漂亮链接:http : //www.thecoldsun.com/en/content/01-2009/abstra
问题内容: 可以有一个 实现所有方法 的抽象类-里面没有抽象方法。 例如。: 与拥有与具体类相同的类相比,拥有这样的抽象类(如果有)有什么优势? 我能想到的是,当我将其声明为抽象时,它将不会被实例化。但是,我可以通过将其具体化并将其构造函数设为私有来达到相同的效果。 TIA。 // ================== 编辑:我能想到的另一种用途: 它可能会扩展另一个抽象类或实现一个接口,而不实现
问题内容: 这个问题已经在这里有了答案 : 接口与抽象类(一般面向对象) (35个答案) 6年前关闭。 最近,我决定看一下Java,因此我仍然对它以及面向对象编程的方法还很陌生,因此我想在学习更多之前弄清楚一些事情((我想从好的实践开始永远不会很快) )。 我现在正在编写一个2D小游戏,但我想我的问题适用于任何非平凡的项目。为简单起见,我将提供游戏示例。 我有不同类型的僵尸,但是它们都有相同的属性
如果有人能给出我在Java15中需要在接口类和抽象类之间做出选择的1-2个场景示例,我将非常感激。此外,如果它能在现实生活中的项目,而不是动物或形状类的例子,将是伟大的。 谢谢!!
问题内容: 在Java中,您可以创建一个仅包含抽象方法的抽象类。另一方面,您可以创建一个声明相同方法的接口。在这种情况下,可以使用抽象类代替接口吗? 问题答案: 不总是: 一堂课只能延伸 一 堂课 一个类可以实现 多个 接口 Sun文档 进行了更详细的比较: 抽象类与接口 与接口不同,抽象类可以包含非静态和最终字段,并且可以包含已实现的方法。此类抽象类与接口相似,不同之处在于它们提供了部分实现,将