介面到底能不能例項化
介面到底能不能例項化
轉載:https://blog.csdn.net/MaoDunTi/article/details/47804121
先給大家看一個常用的程式碼:
tv1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
注意到OnClickListener,Ctrl +左鍵進入原始碼看到,
public interface OnClickListener {
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
void onClick(View v);
}
我們在學習Java基礎的時候知道,介面是不可以例項化的,那為什麼上面OnClickListener可以new,這不得不讓我們問一下,到底介面能不能例項化。答案是:NO!
解釋一下,這是匿名內部類的寫法。new OnClickListener(){}其實並沒有真正地例項化,new了一個實現介面的匿名內部類,然後new得到匿名內部類的物件再向上轉型為它實現的介面(原始型別)。這樣解釋可能還不夠,再讓大家看一段程式碼:
class MyListener implements OnClickListener {
@Override
public void onClick(View v) {
}
}
tv1.setOnClickListener(new MyListener());
這樣寫大家就不會有任何的疑惑了,因為不再看到介面被例項化了錯覺。我們看到只是一種省略的寫法,它例項化了一個匿名內部類,而這個類實現了一個介面。
相關文章
- Java介面為什麼不能例項化Java
- C# Winform程式介面優化例項C#ORM優化
- java介面例項Java
- python--介面自動化鑑權例項Python
- Java技術分享:Lambda表示式之介面例項化Java
- 遊戲行業到底能不能「躺平」?遊戲行業
- php例項化物件的例項方法PHP物件
- python3+requests+unittest介面自動化例項講解Python
- Laravel kernel例項化Laravel
- SQL優化例項SQL優化
- MySQL 優化例項MySql優化
- 網頁版微信介面呼叫例項網頁
- openwrt luci管理的Web介面例項Web
- Caffe相關C++介面例項C++
- 例項QT程式 —— Qt單例不規則介面程式QT單例
- 免費SSL證書到底能不能用呢
- Grails國際化例項AI
- oracle例項最佳化Oracle
- (轉)MySQL優化例項MySql優化
- CouchBase C 客戶端介面呼叫例項客戶端
- Jmeter介面測試例項-牛刀小試JMeter
- 【物件導向】C# 為什麼用介面例項化一個實現該介面的類?物件C#
- Java類初始化和例項化Java
- .NET 7 的 AOT 到底能不能扛反編譯?編譯
- 程式設計師到底能不能幹過30歲?程式設計師
- 設計模式例項講解 - 介面隔離設計模式
- 程式語言初學者“介面作用”例項解惑
- Dart - 抽象類的例項化Dart抽象
- vue、react隱式例項化VueReact
- DeviceMotionEvent程式碼優化例項dev優化
- 例項化 DevOps 原則dev
- SQL優化例項-思路分析SQL優化
- C++ 結構體例項和類例項的初始化C++結構體
- 關於python呼叫zabbix api介面的自動化例項 [結合saltstack]薦PythonAPI
- webapi+Task並行請求不同介面例項WebAPI並行
- IEnumerable 介面 實現foreach 遍歷 例項
- 例項解釋介面、泛型、比較器使用泛型
- JVM初探(五):類的例項化JVM