Java 継承
Java 継承
このチュートリアルでは、例を使って Java の継承とその型について学びます。
継承は、既存のクラスから新しいクラスを作成できる OOP の重要な機能の 1 つです。
作成された新しいクラスは、サブクラスと呼ばれます (子クラスまたは派生クラス) であり、子クラスの派生元である既存のクラスは スーパークラス と呼ばれます (親または基本クラス)。
extends
キーワードは、Java で継承を実行するために使用されます。たとえば、
class Animal {
// methods and fields
}
// use of extends keyword
// to perform inheritance
class Dog extends Animal {
// methods and fields of Animal
// methods and fields of Dog
}
上記の例では、犬 クラスは Animal からメソッドとフィールドを継承して作成されます クラス。
ほら、犬 はサブクラスであり、動物 はスーパークラスです。
例 1:Java 継承
class Animal {
// field and method of the parent class
String name;
public void eat() {
System.out.println("I can eat");
}
}
// inherit from Animal
class Dog extends Animal {
// new method in subclass
public void display() {
System.out.println("My name is " + name);
}
}
class Main {
public static void main(String[] args) {
// create an object of the subclass
Dog labrador = new Dog();
// access field of superclass
labrador.name = "Rohu";
labrador.display();
// call method of superclass
// using object of subclass
labrador.eat();
}
}
出力
My name is Rohu I can eat
上記の例では、サブクラス Dog を派生させました。 スーパークラス Animal から .ステートメントに注意してください、
labrador.name = "Rohu";
labrador.eat();
ほら、ラブラドール 犬のオブジェクトです .ただし、名前 と eat()
動物のメンバーです クラス。
犬以来 Animal からフィールドとメソッドを継承します 、 Dog のオブジェクトを使用してフィールドとメソッドにアクセスできます .
<図>関係
Java では、継承は is-a です 関係。つまり、2 つのクラス間に is-a 関係が存在する場合にのみ継承を使用します。たとえば、
- 車 乗り物です
- オレンジ 果物です
- 外科医 医者です
- 犬 動物です
こちら、車 Vehicle から継承できます 、オレンジ フルーツから継承できます などです。
Java 継承でのメソッドのオーバーライド
例 1 、サブクラスのオブジェクトがスーパークラスのメソッドにアクセスできることがわかります.
ただし、スーパークラスとサブクラスの両方に同じメソッドが存在する場合はどうなりますか?
この場合、サブクラスのメソッドがスーパークラスのメソッドをオーバーライドします。この概念は、Java ではメソッドのオーバーライドとして知られています。
例 2:Java 継承でのメソッドのオーバーライド
class Animal {
// method in the superclass
public void eat() {
System.out.println("I can eat");
}
}
// Dog inherits Animal
class Dog extends Animal {
// overriding the eat() method
@Override
public void eat() {
System.out.println("I eat dog food");
}
// new method in subclass
public void bark() {
System.out.println("I can bark");
}
}
class Main {
public static void main(String[] args) {
// create an object of the subclass
Dog labrador = new Dog();
// call the eat() method
labrador.eat();
labrador.bark();
}
}
出力
I eat dog food I can bark
上記の例では、eat()
メソッドは両方のスーパークラス Animal に存在します サブクラス Dog .
ここでは、オブジェクト labrador を作成しました。 犬の .
eat()
を呼び出すと、 オブジェクト labrador を使用して 、Dog 内のメソッド と呼ばれます。これは、派生クラス内のメソッドが基本クラス内のメソッドをオーバーライドするためです。
これは、メソッドのオーバーライドと呼ばれます。詳細については、Java メソッドのオーバーライドをご覧ください。
注意 :@Override
を使用しました メソッドをオーバーライドしていることをコンパイラに伝えるアノテーション。ただし、注釈は必須ではありません。詳細については、Java アノテーションにアクセスしてください。
Java 継承の super キーワード
前に、サブクラスの同じメソッドがスーパークラスのメソッドをオーバーライドすることを見てきました.
このような状況では、super
キーワードは、子クラスのメソッドから親クラスのメソッドを呼び出すために使用されます。
例 3:継承の super キーワード
class Animal {
// method in the superclass
public void eat() {
System.out.println("I can eat");
}
}
// Dog inherits Animal
class Dog extends Animal {
// overriding the eat() method
@Override
public void eat() {
// call method of superclass
super.eat();
System.out.println("I eat dog food");
}
// new method in subclass
public void bark() {
System.out.println("I can bark");
}
}
class Main {
public static void main(String[] args) {
// create an object of the subclass
Dog labrador = new Dog();
// call the eat() method
labrador.eat();
labrador.bark();
}
}
出力
I can eat I eat dog food I can bark
上記の例では、eat()
メソッドは、基本クラス Animal の両方に存在します 派生クラス Dog .声明に注目してください、
super.eat();
ここでは、super
キーワードは eat()
を呼び出すために使用されます スーパークラスに存在するメソッド。
super
も使用できます サブクラスのコンストラクターからスーパークラスのコンストラクターを呼び出すキーワード。詳細については、Java スーパー キーワードをご覧ください。
継承の保護されたメンバー
Java では、クラスに protected
が含まれている場合 フィールドとメソッドの場合、これらのフィールドとメソッドはクラスのサブクラスからアクセスできます。
例 4:継承された保護されたメンバー
class Animal {
protected String name;
protected void display() {
System.out.println("I am an animal.");
}
}
class Dog extends Animal {
public void getInfo() {
System.out.println("My name is " + name);
}
}
class Main {
public static void main(String[] args) {
// create an object of the subclass
Dog labrador = new Dog();
// access protected field and method
// using the object of subclass
labrador.name = "Rocky";
labrador.display();
labrador.getInfo();
}
}
出力
I am an animal. My name is Rocky
上記の例では、Animal という名前のクラスを作成しました。クラスには保護されたフィールドが含まれています:name およびメソッド:display()
.
犬を継承しました クラスは Animal を継承します .声明に注目してください、
labrador.name = "Rocky";
labrador.display();
ここでは、labrador を使用してスーパークラスの保護されたフィールドとメソッドにアクセスできます。 サブクラスのオブジェクト。
継承を使用する理由
- Java における継承の最も重要な用途は、コードの再利用性です。親クラスに存在するコードは、子クラスで直接使用できます。
- メソッドのオーバーライドは、ランタイム ポリモーフィズムとも呼ばれます。したがって、継承を利用して Java でポリモーフィズムを実現できます。
継承の種類
継承には 5 つのタイプがあります。
1.単一継承
単一継承では、単一のサブクラスが単一のスーパークラスから継承されます。たとえば、
<図>2.マルチレベル継承
マルチレベル継承では、サブクラスがスーパークラスから拡張され、同じサブクラスが別のクラスのスーパークラスとして機能します。たとえば、
<図>3.階層的継承
階層継承では、複数のサブクラスが 1 つのスーパークラスから拡張されます。たとえば、
<図>4.多重継承
多重継承では、1 つのサブクラスが複数のスーパークラスから拡張されます。たとえば、
<図>注意 :Java は多重継承をサポートしていません。ただし、インターフェイスを使用して多重継承を実現できます。詳細については、Java が多重継承を実装するを参照してください。
5.ハイブリッド継承
ハイブリッド継承は、2 種類以上の継承の組み合わせです。たとえば、
<図>ここでは、階層継承と多重継承を組み合わせてハイブリッド継承を形成しています。
Java