abstract キーワードを使用して宣言されたクラスは、以下では抽象クラスと呼ばれます。 ジャワ 。抽象メソッドと非抽象メソッド (本体を含むメソッド) を持つことができます。
Java 抽象クラスを学習する前に、まず Java の抽象化について理解しましょう。
ユーザー名
Java の抽象化
抽象化 実装の詳細を非表示にし、機能のみをユーザーに表示するプロセスです。
別の方法では、ユーザーに重要なものだけを表示し、内部の詳細を非表示にします。たとえば、テキストを入力してメッセージを送信する SMS の送信です。メッセージ配信に関する内部処理はわかりません。
抽象化により、対象となるものに焦点を当てることができます 物体 どのように行うかではなく、行います。
抽象化を実現する方法
Javaで抽象化を実現するには2つの方法があります
- 抽象クラス (0 ~ 100%)
- インターフェース (100%)
Javaの抽象クラス
抽象として宣言されたクラスは、 抽象クラス 。抽象メソッドと非抽象メソッドを含めることができます。これを拡張し、そのメソッドを実装する必要があります。インスタンス化することはできません。
留意事項
- 抽象クラスは、抽象キーワードを使用して宣言する必要があります。
- 抽象メソッドと非抽象メソッドを含めることができます。
- インスタンス化することはできません。
- それは可能です コンストラクター 静的メソッドも。
- サブクラスにメソッドの本体を変更させないように強制するfinalメソッドを含めることができます。
抽象クラスの例
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