JAVA STUDY(with whiteship)6週目
6595 ワード
継承
n/a.ターゲット
Java継承を学ぶ.
目次
1.Java継承の特徴
class Man {
public String name;
public void tellYourName() { ... }
}
class BusinessMan extends Man {
public String company;
public void tellYourInfo() {...}
}
extendsキーワードを使用してクラスを継承します.上記のコードでは、BusinessMan bm=new BusinessMan();BusinessManクラスを作成するサブクラスインスタンスを使用します.
親クラスであるManクラスのすべてのインスタンスメンバーがインスタンスとして割り当てられます.
継承の目的
多くのjavaベースブックでは、「javaでの継承は、既存のクラスを利用して新しいクラスを記述する構文です」としていますが、再利用の観点から継承が問題になる可能性があります.
回収の観点から,継承は魅力的ではなく,一連の関連クラスの共通の約束を継承の観点から定義すべきである.
関係を継承
継承でクラスの関係を構築するには、条件が必要です.
また、多くの人は、条件やニーズを満たさなければ、継承しないほうがいいと考えています.
継承された基本構文に示すように、サブクラスには親が持つすべてのコンテンツがあります.
さらにサブクラスのみの付加的な特性を加える.
現実世界を例にとると、パソコン、ノートパソコン、タブレットパソコンなどです.
ノートパソコンはコンピューターです.そしてタブレットもパソコンです.
この関係をIS-A関係と呼ぶ.
すなわち,継承関係を確立するには親クラスと子クラスがIS−A関係を確立しなければならない.
2.スーパーキー
super("Man", 1, true);
親ジェネレータのパラメータを渡して、親のジェネレータを呼び出します.親インスタンス変数の初期化は、インスタンス変数によって宣言されるクラスのジェネレータによって行うのが望ましい.親インスタンス変数の初期化が親のジェネレータによって行われない場合、親を継承するすべての子クラスは、親のインスタンス変数を初期化する必要があります.これは非常にストレスのある作業です.
子クラスの作成者では、親クラスの作成者を呼び出す必要があります.
スーパーキーで親作成者を明示的に呼び出さない場合は、デバッガ作成者が自動的に挿入されます.
子クラスのコンストラクション関数が親クラスのコンストラクション関数を呼び出せないと定義されている場合、子クラスのインスタンスは作成できません.
スーパーキーを使用して、サブクラスの親の作成者を呼び出します.
インスタンスの割当て順序は次のとおりです.
(子クラスの作成者で親クラスの作成者を呼び出すため)
->呼び出しはまずサブクラスの作成者ですが、実行はまず一番上の親クラスの作成者であり、次に最初に初期化されます.
スーパーキーを使用して、サブクラスから上書きされた親を呼び出す方法.
superキーを使用して、親クラスの変数とメソッドを呼び出すことができます.
3.メソッドオーバーフロー
子クラスで親クラスで定義を再定義する方法をメソッドオーバーライドと呼びます.
メソッドの名前、戻りタイプ、パラメータの宣言は完全に同じである必要があります.
※まずは!
•親の参照変数は、子のインスタンスを参照できます.
•親を上書きする方法は、子を上書きする方法で上書きされます.
すなわち,外部では参照変数によって上書きされた親クラスを呼び出すことができないメソッドである.
AAA ref1 = new BBB();
• 실제로 참조하는 인스턴스의 종류에 상관없이 참조변수의 자료형으로 선언된 클래스에 정의된 메소드만 호출 가능하다.
• 아래의 관계에서 참조변수의 자료형에 상관없이
마지막으로 오버라이딩을 한 메소드(CCC 클래스의 rideMethod)만 호출된다.
Class AAA{rideMethod()}
Class BBB extends AAA{rideMethod()}
Class CCC extends BBB{rideMethod()}
AAA ref1 = new CCC();
BBB ref2 = new CCC();
CCC ref3 = new CCC();
ref1.rideMethod();
ref2.rideMethod();
ref3.rideMethod();
[参照変数のインスタンス参照とinstanceof演算子]■instanceof演算子
A instanceof B
AがBに変換できる場合、「Aが参照するインスタンスがB、またはBを継承するクラスのインスタンスである場合」
Instanceof演算子は、継承関係に基づく演算子であり、変換可能かどうかを決定します.
ブール形式で返します.
インスタンス変数の場合、メソッドオーバーライド率とは少し異なります.
メソッドがサブクラスで再定義されている場合は、インスタンスの外部で再定義されたメソッドのみが呼び出されます.
ただし、変数については、インスタンスアクセス用の参照変数のデータ型に応じてアクセスできます.
実際には、親クラスで宣言された変数名と同じ変数を子クラスで再宣言することはほとんどありません.
5.finalキーワード
クラスfinal
定数を宣言する際にfinalを用いた.
クラスがfinalであることを宣言することは、「クラスの継承を許可しない」ことを意味します.
開発者は、クラスが継承に適していないと判断した場合、クラスを最終キーワードとして宣言します.
代表的なfinalクラスにはStringクラスがあります.
メソッドのfinal
メソッドをfinalと宣言すると、「このメソッドの過剰使用は許可されていません」と表示されます.
このメソッドが属するクラスを継承しても、このメソッドのオーバーライドは実現できません.
代表的なfinalメソッドには、Objectクラスのwait、notify、notifyAllメソッドが含まれます.
安全上の理由から、この方法の過度な使用も望ましくない.
6.対象クラス
すべてのクラスが継承するObjectクラス
クラスを定義するときに他のクラスを継承しない場合は、
このクラスはjavaです.継承をlangパッケージのObjectクラスにバインドします.
したがって,すべてのクラスが直接または間接的にObjectクラスを継承する.
ここで、間接的にObjectクラスを継承することは、あるサブクラスの最上位レベルがObjectクラスを継承することを意味する.
なぜすべてのクラスがObjectクラスを継承するのですか?
これはJavaのすべてのインスタンスに共通の基準を適用するためです.
たとえば、toStringメソッドに基づいて、JavaのObjectクラスは次のメソッドを定義します.
public String toString();
システムもあります.out.printlnは、次のように定義されたリロード方法であり、任意のクラスのインスタンスをパラメータとして渡すことができます.public void println(Object x)
# End
参考書:私は本当にJAVAを習ったことがありません(ORANGE MEDIA尹承祐著)
Reference
この問題について(JAVA STUDY(with whiteship)6週目), 我々は、より多くの情報をここで見つけました
https://velog.io/@eledev/JAVA-STUDYwith-whiteship-6주차
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(JAVA STUDY(with whiteship)6週目), 我々は、より多くの情報をここで見つけました https://velog.io/@eledev/JAVA-STUDYwith-whiteship-6주차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol