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