Java 抽象クラスと抽象メソッド
Java 抽象クラスと抽象メソッド
このチュートリアルでは、例を使用して Java の抽象クラスとメソッドについて学習します。 Java の抽象化についても学びます。
Java 抽象クラス
Java の抽象クラスはインスタンス化できません (抽象クラスのオブジェクトを作成することはできません)。 abstract
を使用します 抽象クラスを宣言するキーワード。たとえば、
// create an abstract class
abstract class Language {
// fields and methods
}
...
// try to create an object Language
// throws an error
Language obj = new Language();
抽象クラスは、通常のメソッドと抽象メソッドの両方を持つことができます。たとえば、
abstract class Language {
// abstract method
abstract void method1();
// regular method
void method2() {
System.out.println("This is regular method");
}
}
非抽象メソッドについては、Java メソッドを参照してください。ここでは、抽象メソッドについて学びます。
Java 抽象メソッド
本体を持たないメソッドは、抽象メソッドとして知られています。同じ abstract
を使用します 抽象メソッドを作成するためのキーワード。たとえば、
abstract void display();
ここでは、display()
抽象メソッドです。 display()
の本体 ;
に置き換えられます .
クラスに抽象メソッドが含まれる場合、そのクラスは抽象として宣言する必要があります。そうしないと、エラーが発生します。たとえば、
// error
// class should be abstract
class Language {
// abstract method
abstract void method1();
}
例:Java 抽象クラスとメソッド
抽象クラスはインスタンス化できませんが、そこからサブクラスを作成できます。次に、サブクラスのオブジェクトを使用して抽象クラスのメンバーにアクセスできます。たとえば、
abstract class Language {
// method of abstract class
public void display() {
System.out.println("This is Java Programming");
}
}
class Main extends Language {
public static void main(String[] args) {
// create an object of Main
Main obj = new Main();
// access method of abstract class
// using object of Main class
obj.display();
}
}
出力
This is Java programming
上記の例では、Language という名前の抽象クラスを作成しました。 .クラスには通常のメソッド display()
が含まれています .
抽象クラスを継承する Main クラスを作成しました。声明に注目してください、
obj.display();
ここで、obj 子クラス Main のオブジェクトです .オブジェクト obj を使用して抽象クラスのメソッドを呼び出しています .
抽象メソッドの実装
抽象クラスに抽象メソッドが含まれている場合、抽象スーパークラスから継承されたすべての子クラスは、抽象メソッドの実装を提供する必要があります。たとえば、
abstract class Animal {
abstract void makeSound();
public void eat() {
System.out.println("I can eat.");
}
}
class Dog extends Animal {
// provide implementation of abstract method
public void makeSound() {
System.out.println("Bark bark");
}
}
class Main {
public static void main(String[] args) {
// create an object of Dog class
Dog d1 = new Dog();
d1.makeSound();
d1.eat();
}
}
出力
Bark bark I can eat.
上記の例では、抽象クラス Animal を作成しました。 .クラスには抽象メソッド makeSound()
が含まれています および非抽象メソッド eat()
.
サブクラス Dog を継承しました スーパークラス Animal から .ここでは、サブクラス Dog 抽象メソッド makeSound()
の実装を提供します .
次に、オブジェクト d1 を使用しました 犬の メソッド makeSound()
を呼び出すクラス および eat()
.
注意 :犬なら クラスは抽象メソッド makeSound()
の実装を提供しません 、犬 また、abstract として宣言する必要があります。これは、サブクラス Dog が makeSound()
を継承 動物から .
抽象クラスのコンストラクターにアクセスします
抽象クラスは、通常のクラスと同様にコンストラクタを持つことができます。そして、super
を使用して、サブクラスから抽象クラスのコンストラクターにアクセスできます。 キーワード。たとえば、
abstract class Animal {
Animal() {
….
}
}
class Dog extends Animal {
Dog() {
super();
...
}
}
ここでは、super()
を使用しました。 Dog のコンストラクタ内 Animal のコンストラクタにアクセスする .
super
に注意してください 常にサブクラス コンストラクターの最初のステートメントにする必要があります。詳細については、Java スーパー キーワードにアクセスしてください。
Java の抽象化
抽象クラスとメソッドの主な用途は、Java で抽象化を実現することです。
抽象化はオブジェクト指向プログラミングの重要な概念であり、不要な詳細を隠して必要な情報だけを表示することができます。
これにより、よりシンプルで高レベルのアイデアで詳細を省略または非表示にすることで、複雑さを管理できます。
抽象化の実用的な例は、バイクのブレーキです。私たちはブレーキが何をするかを知っています。ブレーキを踏むとバイクが止まります。ただし、ブレーキの働きは私たちには隠されています。
ブレーキの動作を隠すことの主な利点は、メーカーがバイクごとに異なるブレーキを実装できるようになったことですが、ブレーキの機能は同じです。
Java の抽象化をよりよく理解するのに役立つ例を見てみましょう。
例 3:Java の抽象化
abstract class MotorBike {
abstract void brake();
}
class SportsBike extends MotorBike {
// implementation of abstract method
public void brake() {
System.out.println("SportsBike Brake");
}
}
class MountainBike extends MotorBike {
// implementation of abstract method
public void brake() {
System.out.println("MountainBike Brake");
}
}
class Main {
public static void main(String[] args) {
MountainBike m1 = new MountainBike();
m1.brake();
SportsBike s1 = new SportsBike();
s1.brake();
}
}
出力 :
MountainBike Brake SportsBike Brake
上記の例では、抽象スーパー クラス MotorBike を作成しました。 .スーパークラス MotorBike 抽象メソッド brake()
を持っています .
brake()
MotorBike 内でメソッドを実装することはできません .これは、バイクごとにブレーキの実装が異なるためです。つまり、MotorBike のすべてのサブクラス brake()
の実装が異なります .
したがって、brake()
の実装は バイクで は隠されています。
ここで、MountainBike brake()
の独自の実装を作成します そしてスポーツバイク brake()
の独自の実装を作成します .
注意 :Java で抽象化を実現するためにインターフェイスを使用することもできます。詳細については、Java インターフェースをご覧ください。
覚えておくべき重要なポイント
abstract
を使用します 抽象クラスとメソッドを作成するためのキーワード- 抽象メソッドには実装 (メソッド本体) がありません。
- 抽象メソッドを含むクラスも抽象である必要があります。
- 抽象クラスのオブジェクトは作成できません。
- 抽象クラスの機能を実装するには、抽象クラスからサブクラスを継承し、サブクラスのオブジェクトを作成します。
- サブクラスは、抽象クラスのすべての抽象メソッドをオーバーライドする必要があります。ただし、サブクラスが抽象として宣言されている場合、抽象メソッドをオーバーライドすることは必須ではありません。
- 抽象クラスの参照を使用して、抽象クラスの静的属性とメソッドにアクセスできます。たとえば、
Animal.staticMethod();
Java