JAVA接口回调
接口回調是指:可以把使用實現了某一接口的類創建的對象的引用賦給該接口聲明的接口變量,那么該接口變量就可以調用被類實現的接口的方法。實際上,當接口變量調用被類實現的接口中的方法時,就是通知相應的對象調用接口的方法,這一過程稱為對象功能的接口回調。看下面示例:
interface People {
? ? ?void peopleList();
}
class Student implements People {
? ? ?public void peopleList() {
? ? ? ? System.out.println(\"I’m a student.\");
? ? ?}
}
class Teacher implements People {
? ? ?public void peopleList() {
? ? ? ? System.out.println(\"I’m a teacher.\");
? ? ?}
}
public class Example {
? ? ?public static void main(String args[]) {
? ? ? ? People a; // 聲明接口變量
? ? ? ? a = new Student(); // 實例化,接口變量中存放對象的引用
? ? ? ? a.peopleList(); // 接口回調
? ? ? ? a = new Teacher(); // 實例化,接口變量中存放對象的引用
? ? ? ? a.peopleList(); // 接口回調
? ? ?}
}
結果:
I’m a student.
I’m a teacher.
向上轉型:
Shape s=new Circle();?
 這里,創建了一個Circle對象,并把得到的引用立即賦值給Shape。通過繼承,Circle就是一種Shape。
 假設你調用基類方法(它已在導出類中被覆蓋):
 s.draw();?
由于后期綁定(多態),將會正確調用Circle.draw()方法。
?
從實現了某接口的對象,得到對此接口的引用,與向上轉型為這個對象的基類,實質上效果是一樣的。這些對象都可以調用基類型提供的方法,對于接口來說就是回調接口中的方法,對于父類來說就是調用父類的方法。當然在向上轉型的情況下,還牽涉到子類重寫(Override)父類方法的情形。
?
Java回調
chendq@startimes.com.cn
?
?????? 接口回調:可以把使用實現了某一接口的類創建的對象的引用賦給該接口聲明的接口變量,那么該接口變量就可以調用被類實現的接口的方法。實際上,當接口變量調用被類實現的接口中的方法時,就是通知相應的對象調用接口的方法,這一過程稱為對象功能的接口回調。
觀察者模式:是將觀察者和被觀察的對象分離開, 當被觀察的對象產生一定變化的時候, 觀察者就會根據哪里產生的變化, 產生了變化, 而進行相應的處理.大部分觀察著模式是用接口回調的方法來實現的.
前者是一種體現, 后者是一種用前者實現的模式, 相當于后者調用前者, 他們兩個沒有可以比較的地方
?
接口回調的實例:
?
?
?
interface IPeople { void peopleList(); }
class Student implements IPeople {
?????? publicvoid peopleList(){ //doSomething… }
}
class Test {
?????? privateIPeople p;//聲明接口變量
?????? Test(IPeoplep){ this.p = p} //實例化,接口變量中存放對象的引用
?????? method(){
????????????? p.peopleList();? //接口回調
}
main(){
?????? IPeople p = new Student();
?????? new Test(p).method();
}
}
?
?
其他相關主題
1.內部類:(Thinking InJava)每個內部類都能獨立地繼承自一個(接口的)實現,所以無論外部類是否已經繼承了(接口的)實現,對于內部類都沒有影響。內部類可以間接的有效地實現了“多重繼承”。即是說,內部類允許繼承多個非接口類型(類或抽象類)
Example:(抽象或具體的類,使用內部類實現多重繼承)
class D { }
abstract class E {? }
class Z extendsD {
??????? E makeE() return new E() { };}//匿名內部類
}
?
2.閉包:(Thinking InJava)是一個可調用的對象,它記錄了一些信息,這些信息來自創建它的作用域。與內部類概念相比較,可知,內部類是面向對象的閉包。閉包(JavaEye)是具有閉合作用域的匿名函數,是可以用作函數參數和方法參數的代碼塊。本質上來說,一個閉包是一塊代碼,它們能作為參數傳遞給一個方法調用。
?
3.?
轉載于:https://www.cnblogs.com/lgh1992314/archive/2012/12/15/5835255.html
總結
 
                            
                        - 上一篇: delphi编译缺少组件 imgedit
- 下一篇: STL源码剖析——P142关于list:
