向上轉型與接口回調

什麼是接口回調?
一、接口回調是什麼?
接口回調是指:能夠把使用某一接口的類建立的對象的引用賦給該接口聲明的接口變量,那麼該接口變量就能夠調用被類實現的接口的方法。實際上,當接口變量調用被類實現的接口中的方法時,就是通知相應的對象調用接口的方法,這一過程稱爲對象功能的接口回調。看下面示例。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(); // 接口回調
    }
}

結果:ide

I’m a student.code

I’m a teacher.對象

 

2.什麼是向上轉型?繼承

Shape s=new Circle(); 接口

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

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

須要咱們本身定義強制進行.
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)進行了強制轉換! 
    } 
變量

 

三、向上轉型與接口回調的區別List

  向上轉型是對象之間轉型,與接口回調形式相似擔心本質不一樣。

從實現了某接口的對象,獲得對此接口的引用,與向上轉型爲這個對象的基類,實質上效果是同樣的。這些對象均可以調用基類型提供的方法,對於接口來講就是回調接口中的方法,對於父類來講就是調用父類的方法。固然在向上轉型的狀況下,還牽涉到子類重寫( Override )父類方法的情形。

相關文章
相關標籤/搜索