abstract キーワードは、Java で抽象化を実現するために使用されます。これは、抽象クラスとメソッドを作成するために使用される非アクセス修飾子です。
抽象クラスの役割は、抽象メソッドを含めることです。ただし、非抽象メソッドが含まれる場合もあります。 abstract キーワードを使用して宣言され、実装を持たないメソッドは、抽象メソッドと呼ばれます。
構文:-
abstract class Employee { abstract void work(); }
注 - 非抽象クラスでは抽象メソッドを宣言できません。
抽象キーワードのルール
してはいけないこと
- 抽象キーワードは変数やコンストラクターと一緒に使用できません。
- クラスが抽象クラスの場合、インスタンス化できません。
- メソッドが抽象メソッドの場合、メソッドには本体が含まれません。
- abstract キーワードを一緒に使用することはできません。 最後の 。
- 抽象メソッドを次のように宣言することはできません。 プライベート 。
- 抽象メソッドを次のように宣言することはできません。 静的 。
- 抽象メソッドは同期できません。
やるべきこと
- 抽象キーワードはクラスおよびメソッドでのみ使用できます。
- 抽象クラスにはコンストラクターと静的メソッドを含めることができます。
- クラスが抽象クラスを拡張する場合、少なくとも 1 つの抽象メソッドも実装する必要があります。
- 抽象クラスには、メイン メソッドと最終メソッドを含めることができます。
- 抽象クラスには、オーバーロードされた抽象メソッドを含めることができます。
- ローカルの内部クラスを抽象クラスとして宣言できます。
- throw 節を使用して抽象メソッドを宣言できます。
抽象的なキーワードの例
例 1: 抽象メソッドを含む抽象クラス
abstract class Vehicle { abstract void bike(); } class Honda extends Vehicle { @Override void bike() { System.out.println('Bike is running'); } } public class AbstractExample1 { public static void main(String[] args) { Honda obj=new Honda(); obj.bike(); } }今すぐテストしてください
出力:
js オンクリック
Bike is running
例 2: 抽象メソッドと非抽象メソッドを含む抽象クラス
abstract class Vehicle { abstract void bike(); void car() { System.out.println('Car is running'); } } class Honda extends Vehicle { @Override void bike() { System.out.println('Bike is running'); } } public class AbstractExample2 { public static void main(String[] args) { Honda obj=new Honda(); obj.bike(); obj.car(); } }今すぐテストしてください
出力:
Bike is running Car is running
例 3: コンストラクターを含む抽象クラス
abstract class Vehicle { String msg; Vehicle(String msg) { this.msg=msg; } void display() { System.out.println(msg); } } class Honda extends Vehicle { Honda(String msg) { super(msg); } } public class AbstractExample3 { public static void main(String[] args) { Honda obj=new Honda('Constructor is invoked'); obj.display(); } }今すぐテストしてください
出力:
Constructor is invoked
例 4: オーバーロードされた抽象メソッドを含む抽象クラス
abstract class Vehicle { abstract void display(); abstract void display(String msg); } class Honda extends Vehicle { @Override void display() { System.out.println('abstract method is invoked'); } @Override void display(String msg) { System.out.println(msg); } } public class AbstractExample4 { public static void main(String[] args) { Honda obj=new Honda(); obj.display(); obj.display('overloaded abstract method is invoked'); } }今すぐテストしてください
出力:
バイナリツリーとBSTの比較
abstract method is invoked overloaded abstract method is invoked
例 5: 内部抽象クラス
class Vehicle { abstract class Car { abstract void display(); } class Honda extends Car { @Override void display() { System.out.println('inner abstract class is invoked'); } } } public class AbstractExample5 { public static void main(String[] args) { Vehicle obj=new Vehicle(); Vehicle.Car c=obj.new Honda(); c.display(); } }今すぐテストしてください
出力:
inner abstract class is invoked
例 6: ネストされた抽象クラス
abstract class Vehicle { abstract class Car { abstract void display(); } } class Honda extends Vehicle { class FourWheller extends Car { @Override void display() { System.out.println('nested abstract class is invoked'); } } } public class AbstractExample6 { public static void main(String[] args) { Vehicle obj=new Honda(); Honda h=(Honda)obj; Honda.FourWheller fw=h.new FourWheller(); fw.display(); } }今すぐテストしてください
出力:
nested abstract class is invoked