この記事の内容:
- 抽象クラス
- インターフェース
- 抽象クラスとインターフェースの類似点と相違点
抽象クラス:
-
すでに親クラスがありますが、親クラスがいくつかの共通属性を直接記述できない場合があります。たとえば、哺乳類と人間の両方が呼び出されます。一般的に、哺乳類の親クラスは「呼び出し」の属性を正確に定義しません。明らかに、サブクラスは「呼び出す」方法を決定する必要がありますが、「call」のプロパティは共有されているため、このプロパティを抽象化でき(abstractは特定のコンテンツがないことを意味します)、サブクラスは特定のコンテンツを実現できます。
-
抽象メソッドは通常のクラスでは定義できないため、抽象クラスが定義されます。
-
抽象メソッドのサブクラスは書き直す必要があるため、書き直さないと実行に失敗するため、サブクラスが抽象メソッドを書き直すようにすることができます。
-
抽象クラスには、抽象メソッドを含めることも、抽象メソッドを含めることもできません(抽象メソッドのない抽象クラス)。抽象メソッドがない場合、サブクラスの継承でメソッドをオーバーライドする必要はありません。
-
抽象クラスはインスタンス化できず、オブジェクトはnewキーワードで作成できません。
-
サブクラスがすべての抽象メソッドをカバーした後でのみ、サブクラスは具体化され、サブクラスはオブジェクトを作成できます。すべての抽象メソッドがカバーされていない場合でも、サブクラスは抽象クラスのままです。
-
抽象メソッドは抽象クラスで定義する必要があり、それらはすべて抽象によって変更する必要があります。抽象メソッドは、定義することはできず、宣言することのみが許可されています。したがって、中括弧はありません。抽象メソッドもファイナライズすることはできません。
-
抽象クラスの定義形式:
-
抽象メソッドの定義形式:
abstract class A{
abstract void talk();//只能声明,不能具体定义
}
class B extends A{
void talk() {
System.out.println("run in B");//子类必须重写抽象方法
}
}
public class Demo {
public static void main(String[] args) {
B b=new B();
b.talk();
}
}
インターフェース:
-
インターフェイスも抽象的であり、抽象化の理由は抽象クラスの場合と同様です。ただし、用途は異なります。インターフェイスは通常、クラスの均一な動作を定義するために使用されますが、抽象クラスは「継承」されます。
-
インターフェイス内のすべての抽象メソッドをクラス書き換えすることを、インターフェイスの実装と呼びます。
-
インターフェイスによって解決される問題:JAVAは多重継承を直接サポートしていませんが、複数の実装をサポートしています。
-
インターフェイス本体には定数定義とメソッド宣言が含まれており、メソッド定義は許可されていません。
-
インターフェイスは完全に抽象的な抽象クラスであると言えます。
-
サブクラスは、インスタンス化する前に、インターフェイス内のすべての抽象メソッドをカバーする必要があります。それ以外の場合は、抽象クラスです。
-
クラスがインターフェースを実装する場合、クラスはインターフェースで宣言されたメソッドを定義する必要があります。メソッドを実装する場合、メソッド名、戻り値の型、パラメーターの数、およびパラメーターの型は、インターフェース宣言と一致している必要があります。
-
インターフェイスでは、メソッドの修飾子はデフォルトでpublic abstractです。インターフェイスの定数の修飾子は、デフォルトでpublic static finalです。したがって、サブクラスはpublicを使用して定義されたメソッドを装飾する必要があります。
-
インターフェイスの定義形式:
-
インターフェイスの実装:
package 接口;
interface A{
public static final int size=100;
public abstract void talk();
// public abstract void eat();
}
class B implements A{
//实现A中的抽象方法
public void talk() {
System.out.println("B talk");
}
}
public class Demo {
public static void main(String[] args) {
new B().talk();
}
}
注意:
-
クラス宣言がインターフェイスを実装しているが、インターフェイスのすべてのメソッドを実装していない場合、そのクラスは抽象クラスである必要があります
-
クラスがインターフェイスのすべてのメソッドを完全に実装していない場合、このクラスは抽象クラスである必要があります。
抽象クラスとインターフェースの類似点と相違点:
-
同じ:
- すべて抽象
- インスタンス化できません
- 抽象メソッドを含めることができます。これらの抽象メソッドは、クラスの関数を記述するために使用されますが、特定の実装を提供しません。
-
差:
- インターフェイスは完全に抽象的です
-
コンセプトデザインの違い:
- 抽象クラスは非抽象メソッドを持つことができますが、インターフェイスは完全に抽象です。実際、それらの違いは次のように理解できます。AとBはどちらも抽象クラスですが、「親クラス」であるため、一般的に特定のプロパティでは、抽象クラスは親クラスの抽象化であると言えますが、親クラスとサブクラスの関係から切り離すことはできません。ただし、インターフェイスは動作を定義し、強い親子関係はありません。 、それは完全に抽象的です。工場内のコンポーネントのさまざまな標準のように、いくつかの動作を標準として定義します。
- インターフェイスの変数とメソッド修飾子はすべて、インターフェイスが「オープンで固定された動作標準」であることを示しています。