差异示例 b/w 摘要 class & 接口与 Java 中的默认方法 8

Example of difference b/w Abstract class & Interfaces with default method in Java 8

我知道已经有一个与此相关的问题,Interface with default methods vs Abstract class in Java 8 但这个问题是在 Java 8 发布之前提出的,它只是抽象之间的区别的要点类 和默认方法的接口,它根本没有提供任何实际的例子,而只是充满了文字解释。

我发布这个问题是因为我对一个实际示例更感兴趣,该示例清楚了抽象 Class 和 Java 8.

中带有默认方法的接口之间的区别

看看这个例子,

摘要Class,

abstract class AbstractClass {

    public int var = 0;

    // These methods must be Overridden
    abstract int x();
    abstract int y();

    // This method is optional
    int z() {
        return 0;
    }

}

接口(Java8)

interface Interface {

    public int var = 0;

    // These methods must be Overridden
    int x();
    int y();

    // This method is optional
    default int z(){
        return 0;
    }
}

如果我想向新手 Java 程序员(比如我自己)解释它的实际区别,我该如何区分以上两者?

this文章说,

The benefit that default methods bring is that now it’s possible to add a new default method to the interface and it doesn’t break the implementations.

这不可能是具有默认方法的接口的唯一好处,是吗?

首先你要明白

两者的区别
abstract class AbstractClass {

    public int var = 0;

…

interface Interface {

    public int var = 0;

    …

后者is equivalent to

   public static final int var = 0;

与写作完全不同

   public int var = 0;

abstract class 中。这种差异已经在您通过 “Abstract classes can have state” 链接的问题中得到了解释。接口只能定义常量。这意味着您不能为 interface 提供 default 方法来对实例字段执行任何操作,因为 interface 无法定义实例字段。 default 方法只能在其他 interface 方法之上工作。

有时尝试理解“文字解释”而不是要求“实际例子”真的很有帮助。换句话说,您链接的问题和答案仍然有效。

关于 Java 8 中 default 方法的目的,那个问题 has been asked before 也是如此。

总结 abstract classes 和 interfaces 之间的一些差异:

  • interface成员都是public,不能定义privateprotected或package-private成员;当您省略 public 修饰符时,它是隐含的(从 Java 9 开始,允许使用 private 方法)
  • interface 字段仅用于定义常量;它们隐含地 static final
  • abstract classes 可以有 static class 初始化代码和实例构造函数
  • abstract classes 可能有状态,即定义实例字段并提供使用它们的方法
  • abstract classes 可以为 java.lang.Object 中定义的方法 equalshashCodetoString 提供实现,而 default interfaces 中指定的方法不能覆盖这些方法
  • abstract classes 可以定义 finalstrictfpsynchronizednative 方法
  • a class 只能扩展一个 abstract 或具体 class 但实现多个 interface