java同样作用的方法_Java的接口用途和方法
1, 抽象類解決不了, 根本問(wèn)題是Java的類不能多繼承.
因?yàn)門iger類繼承了動(dòng)物Animal類的特性(例如 move() 和 drink()) , 但是嚴(yán)格上來(lái)將 捕獵(hunt())并不算是動(dòng)物的特性之一. 有些植物, 單細(xì)胞生物也會(huì)捕獵的.
所以Tiger要從別的地方來(lái)繼承Hunt()這個(gè)方法. 接口就發(fā)揮作用了.
2,也就是說(shuō), 接口不會(huì)限制實(shí)現(xiàn)接口的類的類型,Tiger類與Snake類不但繼承了Animal的方法, 還繼承(實(shí)現(xiàn))了接口Huntable的方法, 一定程度上彌補(bǔ)java的class不支持多繼承的特點(diǎn).
public void feedAnimal(Huntable hab, Animal a){
this.bringAnimal(a,"Feeding Room");
Animal ht = (Animal)hab;
ht.move("Feeding Room");
hab.hunt(a);
}
里面一樣有一句強(qiáng)制轉(zhuǎn)換:Animal ht = (Animal)hab
3,什么情況下應(yīng)該使用接口而不用抽象類.
做個(gè)總結(jié)
需要實(shí)現(xiàn)多態(tài)
要實(shí)現(xiàn)的方法(功能)不是當(dāng)前類族的必要(屬性).
要為不同類族的多個(gè)類實(shí)現(xiàn)同樣的方法(功能).
下面是分析:
3.1 需要實(shí)現(xiàn)多態(tài)
很明顯, 接口其中一個(gè)存在意義就是為了實(shí)現(xiàn)多態(tài). 這里不多說(shuō)了.
而抽象類(繼承) 也可以實(shí)現(xiàn)多態(tài)
3.2. 要實(shí)現(xiàn)的方法(功能)不是當(dāng)前類族的必要(屬性).
上面的例子就表明, 捕獵這個(gè)方法不是動(dòng)物這個(gè)類必須的,
在動(dòng)物的派生類中, 有些類需要, 有些不需要.
如果把捕獵方法卸載動(dòng)物超類里面是不合理的浪費(fèi)資源.
所以把捕獵這個(gè)方法封裝成1個(gè)接口, 讓派生類自己去選擇實(shí)現(xiàn)!
3.3. 要為不同類族的多個(gè)類實(shí)現(xiàn)同樣的方法(功能).
上面說(shuō)過(guò)了, 其實(shí)不是只有Animal類的派生類才可以實(shí)現(xiàn)Huntable接口.
如果Farmer實(shí)現(xiàn)了這個(gè)接口, 那么農(nóng)夫自己就可以去捕獵動(dòng)物了...
我們拿另個(gè)常用的接口Comparable來(lái)做例子.
這個(gè)接口是應(yīng)用了泛型,
首先, 比較(CompareTo) 這種行為很難界定適用的類族, 實(shí)際上, 幾乎所有的類都可以比較.
比如 數(shù)字類可以比較大小, 人類可以比較財(cái)富, 動(dòng)物可以比較體重等.
所以各種類都可以實(shí)現(xiàn)這個(gè)比較接口.
一旦實(shí)現(xiàn)了這個(gè)比較接口. 就可以開(kāi)啟另1個(gè)隱藏技能:
就是可以利用Arrays.sort()來(lái)進(jìn)行排序了.
就如實(shí)現(xiàn)了捕獵的動(dòng)物,
可以被農(nóng)夫Farmer喂兔子一樣...
4,有別的理解:
①全局變量定義
②如同上面的例子,我們?nèi)?shí)現(xiàn)接口后,能夠很明顯清楚各個(gè)類具體實(shí)現(xiàn)類之間的關(guān)系,如果將自己的代碼交給別人看的時(shí)候,他只需要看你所定義的接口就知道了你的類具體是干嘛的。換言之,你看別人的代碼,如果別人的代碼也是這樣定義的,那么是不是改別人代碼、看懂別人代碼也容易很多了。所以,在之前筆者就說(shuō)過(guò):接口更像是一種定義的規(guī)范。
總結(jié)
以上是生活随笔為你收集整理的java同样作用的方法_Java的接口用途和方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2 中ascii函数_C语言编程预备知识
- 下一篇: java put set_Java Pu