[改善Java代码]在接口中不要存在实现代码
第3章? 類、對象及方法
書讀得多而不思考,你會覺得自己知道的很多。
書讀得多而思考,你會覺得自己不懂的越來越多。
—伏爾泰
在面向對象編程(Object-Oriented Programming,OOP)的世界里,類和對象是真實世界的描述工具,方法是行為和動作的展示形式,封裝、繼承、多態則是其多姿多彩的主要實現方式,如此,OOP才會像現在這樣繁榮昌盛、欣欣向榮。
本章主要講述關于Java類、對象、方法的種種規則、限制及建議,讓讀者在面向對象編程的世界中走得更遠,飛得更高。
建議31: 在接口中不要存在實現代碼
看到這樣的標題讀者可能會納悶:接口中有實現代碼?這怎么可能呢?確實,接口中可以聲明常量,聲明抽象方法,也可以繼承父接口,但就是不能有具體實現,因為接口是一種契約(Contract),是一種框架性協議,這表明它的實現類都是同一種類型,或者是具備相似特征的一個集合體。對于一般程序,接口確實沒有任何實現,但是在那些特殊的程序中就例外了,閱讀如下代碼:
1 public class Client { 2 public static void main(String[] args) { 3 // 調用接口的實現 4 B.s.doSomething(); 5 } 6 } 7 8 // 在接口中存在實現代碼 9 interface B { 10 public static final S s = new S() { 11 public void doSomething() { 12 System.out.println("我在接口中實現了"); 13 } 14 }; 15 } 16 17 // 被實現的接口 18 interface S { 19 public void doSomething(); 20 }仔細看main方法,注意那個B接口。它調用了接口常量,在沒有任何顯式實現類的情況下,它竟然打印出了結果,那B接口中的s常量(接口是S)是在什么地方被實現的呢?答案是在B接口中。
在B接口中聲明了一個靜態常量s,其值是一個匿名內部類(Anonymous Inner Class)的實例對象,就是該匿名內部類(當然,可以不用匿名,直接在接口中實現內部類也是允許的)實現了S接口。你看,在接口中存在著實現代碼吧!
這確實很好,很強大,但是在一般的項目中,此類代碼是嚴禁出現的,原因很簡單:這是一種不好的編碼習慣,接口是用來干什么的?接口是一個契約,不僅僅約束著實現者,同時也是一個保證,保證提供的服務(常量、方法)是穩定、可靠的,如果把實現代碼寫到接口中,那接口就綁定了可能變化的因素,這就會導致實現不再穩定和可靠,是隨時都可能被拋棄、被更改、被重構的。所以,接口中雖然可以有實現,但應避免使用。
注意 接口中不能存在實現代碼。
?
轉載于:https://www.cnblogs.com/DreamDrive/p/5425119.html
總結
以上是生活随笔為你收集整理的[改善Java代码]在接口中不要存在实现代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图解javascript中this指向
- 下一篇: 华硕主板启动选项怎么设置方法 设置华硕主