インタフェースの概念はずっと理解していません.好きなことを言って、自分の理解を話してください.


インタフェース、javaで重要な概念です.
大学の时(もちろん、私の大学はあまり勉强していないで、混じっています)、インタフェースに対する认识は、それは1种の规范で、中はすべて抽象的な方法で、具体的な実现がなくて、つまりこれらの方法の方法体がなくて、その种类を実现して、きっとその方法を実现します.
その後、仕事をして、結局すべての同僚はこれらの話しかできなくて、しかも自分がよく理解していると思っています.
本を読む学習に従って、私はインタフェースと多態を知って、後期はこれらの概念を縛って、いっしょに理解して、例えば今1つの方法aがあって、パラメータはインタフェースのタイプの引用であることができて、しかし最後に伝達したパラメータ、すべてこのインタフェースを実現した類の対象で、この中で多態と後期の縛りを理解しなければなりません.インタフェースの利点を見ることができます:方法aのパラメータはインタフェースの引用で、あなたはこのインタフェースの何百もの実現に対して、すべての実現に対して1つの方法を書く必要はありません.ただインタフェースのタイプに対して書いて、それから多態と後期のバインドを通じて、これはjavaが自分であなたを助けて完成したので、修正しても便利です.結局、1つの方法しかありません.もし新しい実現があっても問題ありません.そうでなければ、新しい実現があるたびに、もう一つの方法を書きます.
次のようになります.

          。
interface Processor{
	 public String name();
	 Object process(Object input);
}
1.        
class Upcase implements Processor{
        public String name(){
		return getClass().getSimpleName();
	}
	String process(Object input){
		return ((String)input).toUpperCase();
	}
}
2:        
class Lowercase implements Processor{
        public String name(){
		return getClass().getSimpleName();
	}
	String process(Object input){
		return ((String)input).toLowerCase();
	}
}
3.          
class Splitter implements Processor{
        public String name(){
		return getClass().getSimpleName();
	}
	String process(Object input){
		return Arrays.toString(((String)input).split(" "));
	}
}

public class Apply {
	public static void process(Processor p ,Object s){
		System.out.println("Using Procsssor"+p.name());
		System.out.println(p.process(s));
	}
	public static String a ="Dinnger Ni hao Wo ai kkkkkkkkkkkkKKKKKKKKK";
	public static void main(String[] args) {
		process(new Upcase(), a);
		process(new Lowercase(), a);
		process(new Splitter(), a);
	}

}
    process  ,     Processor p,           。

今私はインタフェースのこの2点を理解して、しかし何度もインタフェースを见て、やはりとても迷って、分かりません
第1点はとても思っています:規範ですか、あなたはある分野で経験が少なすぎて、人はあなたに規範を書くように手伝って、あなたはすべて実現しただけで、いいです.完成しました.
例えば、サーブレットContextリスナーを実装させると、2つのインタフェースサーブレットContextListenerとサーブレットContextAttributeListeneを実装すればいいと言われています.あなたは実現します.
2つ目は、これらのコードです.私は人が書いた文章を見て、インタフェース向けのプログラミングと呼ばれていますが、私の理解が正しいかどうか分かりません.インタフェースに向かって編集し、その実装クラスによって最後に問題を解決します.
最近jspを見て、requestオブジェクトのタイプはインタフェースですが、このオブジェクトでパラメータを得ることができますか、あるいはその他の方法を使うことができます.私は分かりません.私も実装を書いていません.どうしてその方法を使うことができますか.後で分かりました.これは内蔵オブジェクトと呼ばれています.直接使うことができます.あなた自身は実装を書く必要はありません.しかし、私は多くの資料を見て、すべてインタフェースのタイプの引用で、直接その方法を調整することができます.私は実現を書いていないし、どこで書いたのか分からない.どうせ呼び出せる方法だ.
私は会社でも多くの人が聞いたように、私を見ることができなくて、私はまだjavaの基礎のものをしていると思っていますが、彼らも解答することができなくて、彼らの目の中で、これらのものを必要としないで、使えばいいので、どうしてこのように使うのか分かりません.私はそうしたくないので、それを理解したいです.JAvaベースが一番重要です.
皆さんが自分の理解を話して、私に教えて、私に視野を広げることができることを望んでいます.
最後に私がまとめたjavaバインドを添付して、1冊の本から見たので、それから自分で理解してください.
A,Bは継承関係があり,彼らには方法f()があり,現在A a=new B()である.
a.f()はいったい誰のf()を呼び出すのか.
1)インスタンスメソッドは、動的バインド、java仮想マシンによって決定される参照変数の実際の参照オブジェクトのメソッドにバインドされます.
2)静的メソッドは、参照変数によって宣言されたタイプのメソッドにバインドされます.これは静的バインドに属し、コンパイル期間はバインドされます.
3)メンバー変数は、参照変数によって宣言されたタイプのメンバー変数にバインドされ、このバインドは静的バインドに属し、コンパイル期間はバインドされます.