Javaプログラミング多重類コードの詳細解


本論文で研究したのは主にJavaプログラミング中の多重類です。一体、多重化類はどんなものですか?またどのような使い方がありますか?具体的に紹介します。
羅昇陽さんのインタビューを見て、思わず感心しました。若いです。羅永浩さんと同じクラスの年齢だと思っていました。中学校のプログラミングではない大牛の一人です。インタビューしてみたら、羅さんも一歩ずつ足跡を残している人です。難しいことはおろか、できないことはおろか、やってみませんでした。
If you can't fly then run,if you can't run then walk,if you can't walk then crawl,but
whatever you do,you have to keep moving forward――マーティンLuther King.
多重類というタイトルは最初は分かりにくいですが、専門的に本の英語原版を見に行きました。実はタイトルはreusing clasesです。再びクラスを使うということです。実は多重化は「既成のものを利用する」という意味です。実は、実現する二つの方法はjavaでよく耳にする――組合と継承です。
(1)組み合わせ
has-aの役割。

public class TV { 
  Show show; 
  public String toString(){ 
   return "showgirl"; 
  } 
} 
 
class Show{ 
} 
String方法を教えてください。Stringが必要で、あなたがオブジェクトである場合、コンパイラはオブジェクトのtoStringメソッドを呼び出します。
TVでショーがありますが、今のショーは初期化されていません。nullですので、ショーの方法は使えません。
組み合わせの効果が強いので、対象に向けてみてください。もし、カルボ類を作っているなら、簡単にGlass、Light、Engineなどのカルタを組み合わせてもいいです。
(2)継承
is-a

package com.myown.iaiti;
public class Father {
	public int i;
	void get(){
		System.out.println("father");
	}
}
package son;
import com.myown.iaiti.*;
public class Son extends Father{
	Father f = new Father();
	int j = f.i;
	Son son = new Son();
	son.get();
}
public void get(){
	super.get();
	System.out.println("son");
}
}
ここにはパッケージアクセス権限の問題があります。publicを追加していない場合は、デフォルトではパッケージメンバー訪問、すなわちSonのFatherメンバー訪問get方法は見られません。publicは見えるので、iアクセスができます。
prvateの部分は継承できないので、父の種類の私有に属して、publicの部分は継承して、改正の方法が必要で、書き換えることができます。追加する属性は単独で追加できます。
また、継承の方法は、元のfatherのpublicメソッドを書き換えた後にpublicを追加しないと、Canot reduce the visibility of the inhersited method from Fatherがあり、つまり親の相続方法の視認性を減らすことができません。superとは、父類、すなわちFatherのことです。
もう一つのポイントは、javaのすべてのクラスがObjectクラスを陰的に継承していることです。Objectは父類で、その他は子類です。
外国人は基種として話すのが好きです。サブクラスは、導出類や派生類とも呼ばれる。
(3)代理
デザインモードの中には分かりにくいのがあります。代理モードは著者の話が面白いです。代理は組み合わせと継承の中庸です。

package son; 
class Father{ 
  public void get(){ 
    System.out.println("father"); 
  } 
} 
public class Son extends Father{ 
  public static void main(String[] args) { 
    Father f = new Father(); 
    f.get(); 
  } 
} 
 
class FatherProxy{ 
  private Father f = new Father(); 
  public void get(){ 
    f.get(); 
  } 
} 
直接にFatherをメンバーにすると、fatherの方法がこのクラスに暴露されます。FatherProxyのような代理類を使ってもいいです。getの方法を自分で定義して、fatherを呼び出すget方法だと知っていますが、私の代理人は分かりません。代理のgetを使う方法を教えてください。パッケージ性は体現されています。上は適当に叩くだけの簡単な例です。
(4)書き換えと重載

class Father{ 
  public void get(String s){ 
    System.out.println("father"); 
  } 
   
  public void get(boolean b){ 
    System.out.println("boolean"); 
  } 
} 
public class Son extends Father{ 
  @Override 
  public void get(String s){ 
    System.out.println("father"); 
  } 
   
  // @Override //                ,     
  public void get(int i ){ 
    System.out.println("sonint"); 
  } 
   
  public static void main(String[] args) { 
    Son s = new Son(); 
    s.get("d"); 
    s.get(false); 
    s.get(1); 
  } 
} 
書き換えは親を上書きする方法です。書き換えや重載がない場合は、サブクラスにない方法を呼び出します。
リロードは同じ方法名ですが、パラメータ名が違っていますので、間違ったリロードを防ぐために@Overrideタグを付けてもいいです。書き換え方法がないということをヒントにします。
(5)protected
Javaプログラミングアクセス権限の制御コードの詳細
前の編で前書きしました。前に相続の話をしていませんから。
protectedは父親が息子に相続した遺産と簡単に見ることができます。他の非継承類は訪問できません。
(6)finalキーワード
finalキーの基本タイプを加えると、この変数は初期化されても変わりません。cのdefineに似ています。このプログラムで変数がこの値です。変更は必要ありません。finalが使えます。

public class Son{ 
  int age = 2; 
  public static void main(String[] args) { 
     
    final int i = 1; 
    // i = 2;        
    final Son son = new Son(); 
    // son = new Son(); 
    //The final local variable son cannot be assigned.  
    //It must be blank and not using a compound assignment 
    //final       son     ,             
     
    son.age = 4; 
    //        ,  ,         。 
  } 
   
  void change(final int c){ 
    // c= this.age;                                
    //age ++;         
  } 
} 
staticは元々静的初期化で、finalと一緒に使うと、変えられない記憶空間を占めています。
static finalはコンパイルの定数で、定数名はcの定数によって伝統に命名されています。すべて大文字で、単語の間に下線で区切られています。

static final VALUE_ONE = 1; 
final修飾方法の場合

public class Print { 
  final void cannotprint(){ 
    System.out.println(1); 
  } 
} 
 
public class PrintSon extends Print{ 
  //void cannotprint(){} 
  //        final    
   
  public static void main(String[] args) { 
    PrintSon ps = new PrintSon(); 
    ps.cannotprint(); 
  } 
} 
親が子を求めて相続しなければならないと考えられています。prvateが式を隠してfinalに指定して、prvateがまったくあなたに継承しないためです。これはあなたに継承するよりも修正できないのがもっとプライベートです。
ついでに権限を整理します。
  • public、公共財産は、子供だけでなく、他の種類も使えます。
  • final、先祖伝来の宝物は、サブクラスに残していますが、修正は許されません。
  • prvate、親の私有財産は、子類に引き継がれません。
  • protected、親はもっぱら子供の財産を残して、他の人はそれを使うことができません。
  • finalがクラスを修飾したときは、このクラスが引き継がれないようにするためです。
    (7)相続と初期化
    ここの順序問題は面白い問題です。例を見る。
    
    class GrandFather{ 
      private static int i = print(); 
      private static int print(){ 
        System.out.println("g"); 
        return 1; 
      } 
    } 
    class Father extends GrandFather{ 
      private static int i = print(); 
      private static int print(){ 
        System.out.println("f"); 
        return 1; 
      } 
    } 
    public class Son extends Father{ 
      private static int i = print(); 
      private static int print(){ 
        System.out.println("s"); 
        return 1; 
      } 
      public static void main(String[] args) { 
        System.out.println("first"); 
      } 
    } 
    プリントの結果はfirstですか?間違えました。
    メインメソッドを実行しますが、これを見て静的に初期化しなければならないiがありません。結果はs、firstですか?
    これは初期化の問題があります。ソンはfatherを継承しています。コンパイラはfatherをロードして初期化します。それではfatherはgrand fatherを継承しています。そうすると、コンパイラはgrand fatherをロードします。再帰のようです。
    最後に最初に初期化したのはgrand fatherのiです。
    ですから、最後の結果はg、f、s、firstです。
    締め括りをつける
    以上がJavaプログラミング多重類コードについての詳細な内容です。興味のある方は引き続き当駅の他のテーマを参照してください。友達のサポートに感謝します。