インタフェース--内部クラス--マルチ継承


インタフェースは数日前に見ましたが、内部類も3日間見たようです.レンガがまだ燃えていないうちに、流水帳を書きます.
インタフェースについて:
抽象版の抽象類は、もっと純粋で、使い心地もいいです.私はここでインタフェースの特性を羅列したくなくて、使い方とか、私は本当に覚えられないので、個人はずっと今どうしてこんなに高級なプログラミング言語を作ったのかと思っていますが、もっと人の考え方に近づくために、もっと世界の本当の存在に近づくために、もっと自然な客観的な法則に近いです.したがって、ある場所で何かを使って自然に調和しているように見えると、基本的に確率1で正確に収束します.人法地、地法天、天法自然、インタフェースの中でいくつかの定数を定義する方法は、この道理かもしれません.
内部クラスについて:
内部類の名前はよく出ていて、労働者に食欲があるように聞こえますが、このような内部類の大きな役割は一口では消えません.実はデザインの精巧さ、人を感服させて、あのような微小な変化は巨大な効果を引き起こして、朽ちて不思議な力になってプログラム猿を鳴かせません.
内部クラスを作成するのは簡単で、javascriptのような動的言語を使ったことがある人は、自然にそうすべきだと思っています.しかし、よく考えてみると、感心しました.
1、組合せとは異なり、内部クラス(static以外の場合)は、その名前の役割ドメインが外部クラスをインスタンス化したインスタンスの中にあるだけで、そのライフサイクルは外部クラスのインスタンスとは無関係である.
2、組合せとは異なり、内部クラスはインスタンス化の最初から外部クラスインスタンスと関連があり、これにより、内部クラスインスタンスは外部クラスのインスタンスのすべての属性と方法を自由にインスタンス化することができ、それらを持っているようにする.
3、このつながりは、実際には内部クラスがインスタンス化されたときに、その外部クラスインスタンスをインスタンス化した参照をこっそり保存している.次のプレゼンテーションを行います.
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * 
 * @ClassName Outer
 * @Description                    
 * @author BUPTLXB
 * @TimeStamp 2012-7-7  9:24:55
 */
public class Outer {

	private String str1="I am a private.";
	public String str2="I am public.";
	protected String str3="I am protected";
	private int var;
	
	public Outer(){}
	public Outer(int var){
		this.var = var;
	}
	private class Inner{
		public String dispaly(){
			return str1 + "
" + str2 + "
" + str3 + "
" + var; } } public Inner inner(){ return new Inner(); } public static void display(Object o){ System.out.println(o.getClass()+""+o.hashCode()); System.out.println("============methods============"); for(Method m : o.getClass().getDeclaredMethods()){ System.out.println(m); } System.out.println("=============================="); System.out.println("============fields============"); for(Field f : o.getClass().getDeclaredFields()){ System.out.println(f); } System.out.println("=============================="); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Outer o1 = new Outer(); Outer.Inner i1 = o1.new Inner(); Outer.display(i1); System.out.println(i1.dispaly()); Outer.Inner i2 = new Outer(1).new Inner(); Outer.display(i2); System.out.println(i2.dispaly()); } }

コンソールの出力:

class Outer$Inner11383252
============methods============
public java.lang.String Outer$Inner.dispaly()
==============================
============fields============
final Outer Outer$Inner.this$0
==============================
I am a private.
I am public.
I am protected
0
class Outer$Inner23110255
============methods============
public java.lang.String Outer$Inner.dispaly()
==============================
============fields============
final Outer Outer$Inner.this$0
==============================
I am a private.
I am public.
I am protected
1

プレゼンテーションでは、内部クラスの名前と内部宣言の変数final Outer Outer%Innerが表示されます.this$0
4、精巧なこれと.newの設計はこのようなつながりを完備させた.
内部クラスの更なるすばらしさについてやはりみんなにあれらの経典の書籍を見てもらって、内部クラスの強さについて反復器の実現を考えることができて、インタフェースと内部クラスを利用して多継承の問題を解決することを考えることができます.またjavaの反射メカニズムは,内部クラスの全貌を見る機会を与える.
ps:初めて技術フォーラムで文章を書きます.レンガを撮るのを歓迎します.