logo

Javaの抽象クラス

abstract キーワードを使用して宣言されたクラスは、以下では抽象クラスと呼ばれます。 ジャワ 。抽象メソッドと非抽象メソッド (本体を含むメソッド) を持つことができます。

Java 抽象クラスを学習する前に、まず Java の抽象化について理解しましょう。

ユーザー名

Java の抽象化

抽象化 実装の詳細を非表示にし、機能のみをユーザーに表示するプロセスです。

別の方法では、ユーザーに重要なものだけを表示し、内部の詳細を非表示にします。たとえば、テキストを入力してメッセージを送信する SMS の送信です。メッセージ配信に関する内部処理はわかりません。

抽象化により、対象となるものに焦点を当てることができます 物体 どのように行うかではなく、行います。

抽象化を実現する方法

Javaで抽象化を実現するには2つの方法があります

  1. 抽象クラス (0 ~ 100%)
  2. インターフェース (100%)

Javaの抽象クラス

抽象として宣言されたクラスは、 抽象クラス 。抽象メソッドと非抽象メソッドを含めることができます。これを拡張し、そのメソッドを実装する必要があります。インスタンス化することはできません。

留意事項

  • 抽象クラスは、抽象キーワードを使用して宣言する必要があります。
  • 抽象メソッドと非抽象メソッドを含めることができます。
  • インスタンス化することはできません。
  • それは可能です コンストラクター 静的メソッドも。
  • サブクラスにメソッドの本体を変更させないように強制するfinalメソッドを含めることができます。
Java抽象クラスのルール

抽象クラスの例

 abstract class A{} 

Javaの抽象メソッド

抽象として宣言されているが実装されていないメソッドは、抽象メソッドと呼ばれます。

抽象メソッドの例

 abstract void printStatus();//no method body and abstract 

抽象メソッドを持つ抽象クラスの例

この例では、Bike は抽象メソッドの実行を 1 つだけ含む抽象クラスです。その実装は Honda クラスによって提供されます。

 abstract class Bike{ abstract void run(); } class Honda4 extends Bike{ void run(){System.out.println('running safely');} public static void main(String args[]){ Bike obj = new Honda4(); obj.run(); } } 
今すぐテストしてください
 running safely 

Abstract クラスの実際のシナリオを理解する

この例では、Shape は抽象クラスであり、その実装は Rectangle クラスと Circle クラスによって提供されます。

ほとんどの場合、実装クラス (エンド ユーザーには隠されています) についてはわかりません。実装クラスのオブジェクトは、 ファクトリーメソッド

文字列.format Java

ファクトリーメソッド クラスのインスタンスを返すメソッドです。ファクトリーメソッドについては後で学びます。

この例では、Rectangleクラスのインスタンスを作成すると、Rectangleクラスのdraw()メソッドが呼び出されます。

ファイル: TestAbstraction1.java

 abstract class Shape{ abstract void draw(); } //In real scenario, implementation is provided by others i.e. unknown by end user class Rectangle extends Shape{ void draw(){System.out.println('drawing rectangle');} } class Circle1 extends Shape{ void draw(){System.out.println('drawing circle');} } //In real scenario, method is called by programmer or user class TestAbstraction1{ public static void main(String args[]){ Shape s=new Circle1();//In a real scenario, object is provided through method, e.g., getShape() method s.draw(); } } 
今すぐテストしてください
 drawing circle 

Java の Abstract クラスの別の例

ファイル: TestBank.java

 abstract class Bank{ abstract int getRateOfInterest(); } class SBI extends Bank{ int getRateOfInterest(){return 7;} } class PNB extends Bank{ int getRateOfInterest(){return 8;} } class TestBank{ public static void main(String args[]){ Bank b; b=new SBI(); System.out.println('Rate of Interest is: '+b.getRateOfInterest()+' %'); b=new PNB(); System.out.println('Rate of Interest is: '+b.getRateOfInterest()+' %'); }} 
今すぐテストしてください
 Rate of Interest is: 7 % Rate of Interest is: 8 % 

コンストラクター、データメンバー、メソッドを持つ抽象クラス

抽象クラスには、データ メンバー、抽象メソッド、メソッド本体 (非抽象メソッド)、コンストラクター、さらには main() メソッドを含めることができます。

ファイル: TestAbstraction2.java

 //Example of an abstract class that has abstract and non-abstract methods abstract class Bike{ Bike(){System.out.println('bike is created');} abstract void run(); void changeGear(){System.out.println('gear changed');} } //Creating a Child class which inherits Abstract class class Honda extends Bike{ void run(){System.out.println('running safely..');} } //Creating a Test class which calls abstract and non-abstract methods class TestAbstraction2{ public static void main(String args[]){ Bike obj = new Honda(); obj.run(); obj.changeGear(); } } 
今すぐテストしてください
 bike is created running safely.. gear changed 

ルール: クラスに抽象メソッドがある場合、そのクラスは抽象クラスでなければなりません。

 class Bike12{ abstract void run(); } 
今すぐテストしてください
 compile time error 

ルール: 抽象メソッドを持つ抽象クラスを拡張する場合は、メソッドの実装を提供するか、このクラスを抽象にする必要があります。


抽象クラスの別の実際のシナリオ

抽象クラスを使用して、 インターフェース 。このような場合、エンド ユーザーはインターフェイスのすべてのメソッドをオーバーライドする必要はありません。

注: Java の初心者の場合は、最初にインターフェイスを学習し、この例はスキップしてください。

 interface A{ void a(); void b(); void c(); void d(); } abstract class B implements A{ public void c(){System.out.println('I am c');} } class M extends B{ public void a(){System.out.println('I am a');} public void b(){System.out.println('I am b');} public void d(){System.out.println('I am d');} } class Test5{ public static void main(String args[]){ A a=new M(); a.a(); a.b(); a.c(); a.d(); }} 
今すぐテストしてください
 Output:I am a I am b I am c I am d