Javaの継承
それは、階層レベルのクラスを作成できますので、継承は、オブジェクト指向プログラミングのJava技術の基礎となるものです。 継承は、プロセスの他のオブジェクトからプロパティを取得することを目的として理解することができます。
親クラスがクラスである場合は、クラスB、クラスBおよびクラスCは、親クラスであり、我々はまた、CはAのサブクラスである呼び出し、クラスAからクラスCは継承されています。 Javaでは、クラス継承単一継承は、あること、サブクラスが唯一の親クラスを持つことができます
二つの最も一般的に使用されるキーワードの継承がある拡張し、実装しています。
キーワードを使用すると、オブジェクトが別のオブジェクトであるかどうかを決定する両方の(a)は、関係-Aです。
これらの二つのキーワードを使用して、我々は、別のオブジェクトのプロパティを取得する目的を達成することができます。
Objectクラスは、すべてのクラスの祖先があるので、すべてのJavaクラスは、java.lang.Objectクラスによって継承され、さらにオブジェクトに、すべてのクラスは親クラスを持っている必要があります。
次のようなキーワードは、クラスが別のクラスから継承宣言することができて延びオーバーすることで、一般的な形式は次のとおりです。
// A.java public class A { private int i; protected int j; public void func() { } } // B.java public class B extends A { }
上記のコードが示すように、BはAから継承し、BがAのサブクラスであります そしてAは、Objectのサブクラスである、明示的にそこに宣言することはできません。
AのサブクラスのインスタンスBのように、すべてのメンバ変数を持っていますが、プライベート変数Bのメンバーのために、しかし、カプセル化Aのを保証するアクセス権を持っていません。関係-IS
つまり、IS-A:オブジェクトが別のオブジェクトの分類です。
ここでのキーワードは、実装の継承を拡張しています。
public class Animal{ } public class Mammal extends Animal{ } public class Reptile extends Animal{ } public class Dog extends Mammal{ }
上記の例に基づいて、次の文は真であります:
- Animalクラスは親クラスMammalクラスです。
- Animalクラスは親クラス爬虫類クラスです。
- 哺乳類や爬虫類のクラスはAnimalクラスのサブクラスです。
- Dogクラスは、両方のMammalクラスのサブクラスは、Animalクラスのサブクラスです。
次のように上記の例のIS-関係の分析:
- 哺乳動物である、動物
- 爬虫類は、IS-動物
- 犬は、IS-A哺乳類
したがって:犬は動物-IS
extendsキーワードを使用することにより、サブクラスはすべての親クラスのメソッドとプロパティを継承しますが、秘密(プライベート)メソッドとプロパティを使用することはできません。
私たちは、哺乳類を決定することができますinstanceof演算子は、IS-動物使用します
例
public class Dog extends Mammal{ public static void main(String args[]){ Animal a = new Animal(); Mammal m = new Mammal(); Dog d = new Dog(); System.out.println(m instanceof Animal); System.out.println(d instanceof Mammal); System.out.println(d instanceof Animal); } }
次のような結果をコンパイルした上記の例は次のとおりです。
true true true
キーワードを拡張して導入した後、我々は、IS-関係を示すために、implementsキーワードを使用する方法を見ていきます。
クラスの継承インタフェースの場合は、キーワードを実装し、キーワードを使用することはできません。この状況が伸びています。
例
public interface Animal {} public class Mammal implements Animal{ } public class Dog extends Mammal{ }
instanceofのキーワード
あなたは、哺乳類、犬オブジェクトがクラス動物のインスタンスであるかどうかをテストするためにinstanceof演算子を使用することができます。
interface Animal{} class Mammal implements Animal{} public class Dog extends Mammal{ public static void main(String args[]){ Mammal m = new Mammal(); Dog d = new Dog(); System.out.println(m instanceof Animal); System.out.println(d instanceof Mammal); System.out.println(d instanceof Animal); } }
次のような結果をコンパイルした上記の例は次のとおりです。
true true true
HAS-関係
クラスとそのメンバーに代わって所属-HAS。 これは、コードを再利用し、符号誤りを低減するのに役立ちます。
例
public class Vehicle{} public class Speed{} public class Van extends Vehicle{ private Speed sp; }
ヴァンクラスとスピードクラスは、関係(ヴァンはスピードを持っている)、HASされるので、あなたはすべてのコードがクラスにヴァンスピードクラスに貼り付けられ、そしてスピードクラスは、複数のアプリケーションで再利用することができる必要はありません。
オブジェクト指向機能では、ユーザがどのように内部クラスを心配する必要はありません。
ユーザーから隠さヴァンクラスの実装の詳細、ユーザーはヴァンクラスを知らなくても、特定の機能を完了するために、ヴァンクラスを呼び出す方法を知っておく必要があるので、それを自分で行うか、作業を行うために他のクラスを呼び出すことです。
Javaのクラスは複数のクラスを継承することはできません。つまり、単一継承しかサポートしています。
次の練習は有効ではありません。
public class extends Animal, Mammal{}
以下のようなJavaは単一継承のみ(継承と抽象基本クラス)をサポートしていますが、我々は(達成するために多重継承インターフェイス)を実装するためのインタフェースを使用することができ、スクリプトの構造:
public class Apple extends Fruit implements Fruit1, Fruit2{}
キーワードはimplementsキーワードクラスの継承とのインタフェースを実装し拡張して一般的に、我々は、基底クラスと抽象クラスを継承します。