Java中的接口回調和向上轉型


接口回調是指:可以把使用實現了某一接口的類創建的對象的引用賦給該接口聲明的接口變量,那么該接口變量就可以調用被類實現的接口的方法。實際上,當接口變量調用被類實現的接口中的方法時,就是通知相應的對象調用接口的方法,這一過程稱為對象功能的接口回調。看下面示例。
interface People {
    void peopleList();
}
 
class Student implements People {
    publicvoid peopleList() {
       System.out.println("I’m a student.");
    }
}
 
class Teacher implements People {
    publicvoid peopleList() {
       System.out.println("I’m a teacher.");
    }
}
 
publicclass Example {
    publicstaticvoid main(String args[]) {
       People a; // 聲明接口變量
       a = new Student(); // 實例化,接口變量中存放對象的引用
       a.peopleList(); // 接口回調
       a = new Teacher(); // 實例化,接口變量中存放對象的引用
       a.peopleList(); // 接口回調
    }

 

I’m a student.
I’m a teacher.
再來看看向上轉型(upcasting)的概念。


2.什么是向上轉型?

Shape s=new Circle(); 

這里,創建了一個Circle對象,並把得到的引用立即賦值給Shape。通過繼承,Circle就是一種Shape。
假設你調用基類方法(它已在導出類中被覆蓋):
s.draw(); 

由於后期綁定(多態),將會正確調用Circle.draw()方法。
3.Java中的跨類引用
在java里面,關於跨類引用,有兩條規則應該記住:
1)如果a是類A的一個引用,那么,a可以指向類A的一個實例。或者說指向類A的一個子類,這是向上轉型的情形。
2)如果a是接口A的一個引用,那么,a必須指向實現了接口A的一個類的實例。這是接口回調的情形。
在java里面,向上轉型是自動進行的,但是向下轉型卻不是,

需要我們自己定義強制進行.
class B extends A{}
 
publicclass A {
    publicstaticvoid main(String[] argts){
       A a1=new A();
       A a2=new B();//Upcasting向上轉型
       B b1=new B();
       B b2=(B) new A();//DownCasting向下轉型,[注意]:此處(B)進行了強制轉換!
    }

4.向上轉型與接口回調的區別
從實現了某接口的對象,得到對此接口的引用,與向上轉型為這個對象的基類,實質上效果是一樣的。這些對象都可 以調用基類型提供的方法,對於接口來說就是回調接口中的方法,對於父類來說就是調用父類的方法。當然在向上轉型的情況下,還牽涉到子類重寫 (Override)父類方法的情形。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM