Java 8後のインターフェースと抽象クラスの比較
声明:此博文是因为我在百度上找了很多抽象类与接口的区别,发现都没有把Java 8的新特性描述好,所以自己百度总结了一下,如有遗漏,请私信!
同じ点
- インスタンス化できません
- 実装方法として含まれています
- すべてのサブクラスは実装メソッドとして実装する必要があります
違い
- 抽象クラスは抽象によって定義され、インターフェースはインターフェースによって定義されます
- 抽象クラスは単一でのみ継承できますが、複数回継承できます。インターフェースは複数のインターフェースを継承できるだけでなく、複数回実装することもできます
- 抽象クラスには、メソッド本体を含む任意の数のメソッドを含めることができますが、Java 7より前のインターフェースは許可されておらず、Java 8では複数のデフォルトメソッドを使用できます
- 抽象クラスは、主に初期化のためにコンストラクターを持つことができますが、それ自体で調整することはできません。サブクラスによってのみ調整できます。インターフェース用のコンストラクターはありません。
- 抽象クラスアクセスのアクセス修飾子は任意ですが、インターフェースはデフォルトでパブリックであり、インターフェースの変数はデフォルトでパブリックスタティック最終変更です
- 抽象クラスはmainメソッドを持つことができ、それを実行できます;インターフェースはmainメソッドを持つことができません。
付属
抽象クラス:
public abstract class Employee
{
private String name;
private String address;
private int number;
// 构造器
public Employee(String name,String address,int number){
this.name = name;
this.address= address;
this.number= number;
}
public abstract double computePay();
//其余代码
}
インターフェース:
public interface IDemo {
// 默认方法,可以有多个
default void fun() {
System.out.println("Default method");
}
public static final Integer DEFAULT_VAR = 1;
// 抽象方法
public abstract void doGet();
}