Javaの抽象クラス

PHPz
PHPzオリジナル
2024-08-30 15:59:08926ブラウズ

次の記事では、Java の抽象クラスの概要を説明します。抽象クラスは、Java の他の通常のクラスと似ています。抽象クラスと通常のクラスの大きな違いは、抽象クラスを作成することです。「ABSTRACT」キーワードを使用する必要があります。クラス実装の分離です。これらは、サブクラスの非常に一般的な機能を定義するために使用されていました。このようなタイプのクラスは、抽象クラスと呼ばれます。最も重要なことは、抽象クラスのオブジェクトを作成できないということです。

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

抽象クラスには、抽象メソッドだけでなく非抽象メソッドも含めることができます。ただし、サブクラスのみが提供できる抽象メソッドの本体を含めることはできません。サブクラスが抽象メソッドを実装していない場合は、明示的に ABSTRACT にする必要があります。つまり、クラスに抽象メソッドが含まれる場合、クラス自体を ABSTRACT として定義する必要があります。抽象クラスを使用して複数の Java クラスをグループ化し、コードを最適化し、コードを読みやすくし、冗長性を減らすことができます。また、将来のクラス用のテンプレートも提供します。

Java の抽象クラスの構文

抽象クラスの構文は次のとおりです:

Javaの抽象クラス

Java で抽象クラスはどのように機能しますか?

  • 抽象クラスには、抽象メソッドと非抽象メソッド、つまり本体のない抽象メソッドがあり、実装されたメソッドを持つことができます。
  • 抽象クラスは、さまざまなクラスに固有の最も一般的な機能を提供するために使用されます。サブクラスは、ニーズや要件に応じて、これらの抽象メソッドをさまざまな方法で実装できます。
  • 「new」演算子を使用して抽象クラスのオブジェクトを作成することはできませんが、サブクラスのコンストラクターでのみ呼び出すことができるコンストラクターを定義することはできます。サブクラス コンストラクターは、スーパークラス コンストラクターにアクセスしてその変数を初期化できます。この変数は、さらなる要件のためにサブクラスで使用される可能性があります。

Java の抽象クラスの例

以下に例を示します:

Human.java

package com.cont.article;
public abstract class Human
{
public abstract void whatTheylike();
public void doTheysleep()
{
System.out.println("Yes every human require sleep.");
}
}

Human1.java

package com.cont.article;
public class Human1 extends Human
{
@Override
public void whatTheylike()
{
System.out.println("we like to have icecream.");
}
}

Human2.java

package com.cont.article;
public class Human2 extends Human
{
@Override
public void whatTheylike()
{
System.out.println("we like to have coffee.");
}
}

TestHuman.java

package com.cont.article;
public class TestHuman
{
public static void main(String[] args)
{
Human human1 = new Human1();
human1.whatTheylike();
Human human2 = new Human2();
human2.whatTheylike();
human1.doTheysleep();
human2.doTheysleep();
}
}

出力:

Javaの抽象クラス

上記の例では、HUMAN は人間の共通のニーズ、好き嫌いを定義する抽象クラスです。人間にはさまざまなタイプがあり、好き嫌いも異なります。したがって、すべての人間が自分の好みの具体的な実装を提供できます。それは彼らだけに特有のものです。

抽象クラスの主な利点は、要件に応じたメソッドの特定の実装があり、冗長性が削減され、コードの可読性が向上し、メソッドの実装が隠蔽され、部分的な抽象化が提供されることです。

いつ抽象クラスを使用するかを理解するための例がもう 1 つあります。

  • 特定の実装を持つさまざまなクラスと共通の機能を共有するには、抽象クラスを使用する必要があります。
  • 抽象クラスでは、フィールドは静的かつfinalであってはなりません。具体的なメソッド、プライベート メソッド、パブリック メソッド、および保護されたメソッドを使用することもできます。

Animal クラスが 1 つあるとします。地球上にはさまざまな動物がいますが、それらはすべて何らかの意味または主要な意味で互いに異なります。ただし、すべての共通機能がすべて含まれます。

この Animal クラスは、すべての Animal に特定のメソッドを持つことはできません。したがって、抽象クラスの概念により、冗長なコードなしでこの機能を実装できます。

すべての動物には、異なる種類の鳴き声や習慣などがあります。たとえば、犬、猫、象、おやつなどはそれぞれ異なる鳴き声を持っています。そのため、親クラスにジェネリック メソッドを用意し、それを介して他のすべてのサブクラスまたは子クラスが特定の実装を提供できるようにします。

親クラス、つまり Animal には、Sound() と呼ばれる 1 つの汎用抽象メソッドがあります。したがって、すべての子クラスはこのメソッドをオーバーライドし、その特定の実装を提供する必要があります。

抽象クラスとインターフェイス

以下は抽象クラスとインターフェースの違いです:

  • 抽象クラスとインターフェースは両方とも、Java で抽象化を実現するために使用されます。ただし、抽象クラスは部分的な抽象化を提供しますが、インターフェイスは 100% または完全な抽象化を提供します。
  • デフォルトでは、インターフェース内の変数はfinalです。ただし、抽象クラスには非final変数も含まれます。同様に、抽象クラスは静的または非静的変数を持つこともできます。ただし、インターフェースには最終変数と静的変数のみが含まれます。
  • 抽象クラスのメンバー変数はプライベート、パブリック、プロテクトにすることができますが、インターフェイスではデフォルトでパブリックになります。
  • 抽象クラスは別の Java クラスを拡張して複数のインターフェースを実装できますが、1 つのインターフェースは別のインターフェースしか拡張できません。同様に、抽象クラスはインターフェイスの実装を提供できますが、インターフェイスはそれを行うことができません。
  • インターフェースとクラスを実装および拡張するには、implements および extend キーワードを使用します。
  • メソッドを通じて、抽象クラスの非静的変数や非最終変数を変更したりアクセスしたりできます。

結論

抽象クラスは、部分的な抽象化を提供するために使用されます。 NEW キーワードを使用して抽象クラスをインスタンス化することはできません。 Abstract メソッドには本体がなく、常にセミコロン (;) で終わります。抽象クラスには、抽象メソッドと非抽象メソッドが含まれます。抽象スーパークラスのサブクラスは、すべての抽象メソッドを実装する必要があります。提供しない場合は、それ自体を抽象クラスとして宣言する必要があります。スーパークラスが具象であっても、サブクラスは抽象にすることができます。非抽象クラスには抽象メソッドを含めることはできません。また、抽象メソッドは非静的です。したがって、抽象クラスには抽象メソッドと具象メソッドもあり、100% の抽象化を提供することはできません。これは、複雑なロジックをエンドユーザーから隠し、サービスのみを表示するプロセスです。

一方、スーパークラスが具象であってもサブクラスは抽象になることができ、データ型としても使用できます。抽象クラスには静的フィールドと静的メソッドが含まれる場合があります。これらの静的メンバーをクラス参照とともに使用できます。

以上がJavaの抽象クラスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。