我最近开始怀疑,为什么我会使用抽象类,当我可以只使用完全相同的功能进行界面时。请考虑以下事项:
abstract class abstractClass {
public int a;
public void printText(String str) {
System.out.println(str);
}
}
如果我有一个扩展它的子类,我肯定会有一个整数a和一个名为printText的方法。
interface Interface{
public int a = 0;
public default void printtext(String str) {
System.out.println(str);
}
}
如果我有一个类实现它,我肯定会有一个整数a和一个方法printText。
所以,我看到的唯一区别是,通过接口,我创建的任何类都可以实现我想要的其他接口,但是使用抽象类的扩展,我不会被允许扩展更多课程。我为什么要去抽象课?我希望这个问题不是太广泛,虽然我可以看到为什么有人会认为这个问题。
答案 0 :(得分:1)
要考虑几点:
在Java 8之前,接口没有默认方法。
您界面中的a
隐含final
。接口无法定义公共可变字段。
接口无法定义私有(或受保护或包裹)字段。
接口不具备保护或封装方法;在Java 9之前,他们无法使用私有方法。
抽象类没有任何问题。因此,当您需要执行任何这些操作时(#1除外,现在存在默认方法),您可以使用抽象类(可能在添加中实现它所实现的接口)。