差异示例 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;
…
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 和 interface
s 之间的一些差异:
interface
成员都是public
,不能定义private
、protected
或package-private成员;当您省略 public
修饰符时,它是隐含的(从 Java 9 开始,允许使用 private
方法)
interface
字段仅用于定义常量;它们隐含地 static final
abstract
classes 可以有 static
class 初始化代码和实例构造函数
abstract
classes 可能有状态,即定义实例字段并提供使用它们的方法
abstract
classes 可以为 java.lang.Object
中定义的方法 equals
、hashCode
和 toString
提供实现,而 default
interface
s 中指定的方法不能覆盖这些方法
abstract
classes 可以定义 final
、strictfp
、synchronized
或 native
方法
- a
class
只能扩展一个 abstract
或具体 class
但实现多个 interface
我知道已经有一个与此相关的问题,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;
…
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 和 interface
s 之间的一些差异:
interface
成员都是public
,不能定义private
、protected
或package-private成员;当您省略public
修饰符时,它是隐含的(从 Java 9 开始,允许使用private
方法)interface
字段仅用于定义常量;它们隐含地static final
abstract
classes 可以有static
class 初始化代码和实例构造函数abstract
classes 可能有状态,即定义实例字段并提供使用它们的方法abstract
classes 可以为java.lang.Object
中定义的方法equals
、hashCode
和toString
提供实现,而default
interface
s 中指定的方法不能覆盖这些方法abstract
classes 可以定义final
、strictfp
、synchronized
或native
方法- a
class
只能扩展一个abstract
或具体class
但实现多个interface