クラス再生

4308 ワード

Javaの注目すべき特性の一つは、コードの重複使用や再生である.
    Javaには、合成と継承の2つの方法があります.合成は比較的簡単に見えます.つまり、現在以降のいくつかのタイプを含む新しいタイプを宣言します.自動車の例で説明すると、「車輪の繰り返し製造」を避けることだ.「車輪」はいつ作られるべきですか?自動車を製造する準備をする前に(定義の場所で)、自動車を製造しながら(コンストラクタ内で)、自動車を早く完成して車輪を使うまで待つことができます(使用する前に).
    継承の実装は簡単です.「extends」です.簡単ですが、いくつかの問題を考えて、このような一連のものは、まずどれを初期化しますか?実は簡単なプログラムを書いて検証することができます(ベースクラスの初期化が完了してから派生クラスの初期化を開始しますが、実は簡単に考えてもそうです):
 1 class Art {
2 Art() {
3 System.out.println("Art constructor");
4 }
5 }
6 class Drawing extends Art {
7 Drawing() {
8 System.out.println("Drawing constructor");
9 }
10 }
11 public class test extends Drawing {
12 test() {
13 System.out.println("Cartoon constructor");
14 }
15 public static void main(String[] args) {
16 test t = new test();
17 }
18 }

    もちろん必要に応じて継承と合成を再利用することができます.しかし、継承するか合成するかを選ぶべきなのか.継承される特性の一つが「遡及造形」であり、この特性が使えない場合は合成を使いましょう.もう一つの判断方法は、既存のクラスのインタフェースを使用するかどうかを見ることです.「protected」というキーワードは、継承のために用意されているのではないでしょうか.
    「遡及造形」とは?つまり「新しいタイプは既存のタイプの1つ」です.このような言い方は、「なぜ関数パラメータが異なるのに正しくアクセスできるのか」という問題を説明しています.
    継承の中で最後に引き出されたものは「final」です.1つのクラスが「final」に修飾されると、このクラスは継承されません(それだけで、あまり考えないでください).もちろん「final」の使い方はこれだけではありません.例えば、「int」のような値が「final」に修飾されている場合、その値は変更できません.一つの「ハンドル」が修飾されていると、他のオブジェクトを指すことはできません(実はこれは「int」と同じで、混同を恐れているだけなので、単独で言えば、c++の中のconstとどんなに似ているか).メソッドのパラメータの1つが「final」によって修飾されている場合、このメソッド内のパラメータの値は「int」であっても変更できません.「final」で1つのメソッドを修飾すると(すべての「private」修飾のメソッドはデフォルトで「final」)、その効果はc++の中の「inline」と同じになります.また、このメソッドに「ロックをかけた」ことで、他の継承クラスが変更されないようにします.「final」を使うときは慎重に!
-----------------------
個人的に理解して、レンガを撮ることを歓迎します.