介面回撥的原理:介面變數 呼叫 被類實現的介面的方法
其目地都是抽象。通過訪問父類或介面的方法(公共)達到一種對具體實現的封裝。對於介面的使用者來說,不需要關心實現細節。提高內聚,降低不必要的耦合。介面回撥是指:可以把使用實現了某一介面的類建立的物件的引用賦給該介面宣告的介面變數,那麼該介面變數就可以呼叫被類實現的介面的方法。實際上,當介面變數呼叫被類實現的介面中的方法時,就是通知相應的物件呼叫介面的方法,這一過程稱為物件功能的介面回撥。看下面示例。
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.
結果:
I’m a student.
I’m a teacher.
再來看看向上轉型(upcasting)的概念。
2.什麼是向上轉型[1]?
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)父類方法的情形。
相關文章
- 介面呼叫超時的實現原理
- 微博回撥介面
- java介面回撥Java
- JAVA 將介面的引用指向實現類的物件Java物件
- 如何實現查詢介面的所有實現類
- 介面返回前回撥
- 實現跨域iframe介面方法呼叫 簡單介紹跨域
- [Java 基礎]--呼叫webservice介面的方法JavaWeb
- Java_介面回撥與匿名內部類Java
- 【抬槓C#】如何實現介面的base呼叫C#
- Android 回撥方法的實現Android
- 不實現介面的類能用IOC管理嗎?
- AndroidAdapter回撥介面AndroidAPT
- delphi 判斷類是否實現介面,獲取類實現的介面
- 實現呼叫API介面API
- java 一個類實現兩個介面的案例Java
- java 介面回撥經典案例--網路請求回撥Java
- java 介面,介面的特性,介面實現多型,面向介面程式設計Java多型程式設計
- golang中的類和介面的使用Golang
- Asp.net 多語言介面的實現方法...ASP.NET
- 介面的定義和實現
- Java介面回撥機制詳解Java
- 統一管理專案中的介面回撥
- TypeScript 類實現介面TypeScript
- 內部類,類修飾符,上轉型物件,多型,介面回撥物件多型
- Activity生命週期回撥是如何被回撥的?
- C#實現多語言介面程式的方法介紹C#
- 仿京東商城的更多介面的實現(一)
- itchat—python實現呼叫微信介面的第三方模組Python
- Comparable介面的實現和使用
- htmltest~計算器介面的實現HTML
- JAVA介面中的變數Java變數
- 介面的實現方式(顯示和隱示)及協變和逆變
- Win10怎麼變回Win7介面 Win10變回Win7介面圖文教程Win10Win7
- iOS 實現多個可變 cell 複雜介面的製作iOS
- Set介面及其實現類
- java8介面的靜態方法和預設方法Java
- 抽象類和介面的區別抽象