Think In JAVA學習筆記一 細說JAVA中的接口和抽象類

void doStuff(shape s){

s.draw();

s.erase();

}

 這種寫法的好處是,當我們寫出了Circle c=new Circle();Line l=new Line();

        我們都可以做到doStuff(c);或者doStuff(l);真正的像doStuff名稱的取義一樣,做份內的事

             這樣的話,圓知道自己的doStuff方法怎麼實現(比如圓長度的求法,這和Line的求法肯定是不同的),而Line也知道自己的doStuff怎麼取實現,此種編程方法爲動態綁定。像我這樣的java初學者,學到的就是多看書。。。多看別人怎麼寫的。。你不知道的還是很多,知道的愈多會造成不知道的愈多,何況你知道的不多

 

 

前面看的很迷糊!!!但也有收穫,繼續往下

1.6.2 抽象類和接口 抽象類的存在異於接口,爲什麼?

因爲有時候我們不希望其他任何人爲基礎類new出對象,abstract能滿足這個要求,但是接口是可以創建對象的。。。這就是面試題中常問到的問題一:接口和抽象類有什麼不同,一個可以new對象,一個不能new對象。

 

好了問題又來了?那相同的地方又是什麼呢?那就是抽象類和接口的方法又是無定義的,因爲沒必要爲一個不打算new對象的類去定義完全用不着的方法,繼續深入的話就是,不同的地方還有:既然抽象類是類,按照java的規定,一個類不能繼承多個類,爲什麼呢?

 

因爲如果在一個子類繼承的多個父類中擁有相同方法,且子類中有沒有覆蓋該方法,那麼子類在調用該方法時將產生歧義,無法判斷應該調用哪個父類的方法,這個對於父類擁有相同的變量名時也是一樣有歧義的,因此java禁止了多繼承。既然說到了這裏那麼java中的接口是沒有這個缺點的,爲什麼?

 

因爲接口中不能包含方法的實現!不能有變量!所以沒有類多繼承中出現的歧義的問題,可以說接口是比抽象類還要更抽象的一種類。

 

儘管如此,接口還是可以定義一個常量的,那麼爲什麼會有這個常量?是這麼說的:既然接口是一種規則,接口是爲了讓後面的人根據這種規則去實現方法,那麼常量也肯定是一種規則,比如需要定義一個池的接口Pool我希望在定義池的容量大小的時候會有一個範圍,就是最大最小值和默認值,並且希望以後重寫的人也可以遵守。那麼我就會將這些值定義爲常量。希望重寫的人可以遵守,並且也可以將無意義的數字變爲更容易傳達含義的的"MAX_CAPACITY"。這樣,有經驗的程序員就會通過以上的常量來重寫方法,比如在添加時如果池中元素大於"MAX_CAPACITY"就會觸發整理池的方法,或者導致添加失敗等回饋。

 

Java是單根結構的語言,所有的對象都來自一個Object,而C++不是,Java和C都作爲面向對象的編程語言,是經常拿來對比的,單根語言極大的簡化了參數的傳遞。

 

今天暫時到這裏吧!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章