java子類繼承父類實(shí)例 JAVA的多態(tài)用幾句話能直觀的解釋一下嗎?
JAVA的多態(tài)用幾句話能直觀的解釋一下嗎?總之,事物在運(yùn)行過程中有不同的狀態(tài)。Super*P=new sub()P->func()//調(diào)用子類的func如果它不是虛的,P->func將調(diào)用父類
JAVA的多態(tài)用幾句話能直觀的解釋一下嗎?
總之,事物在運(yùn)行過程中有不同的狀態(tài)。
Super*P=new sub()
P->func()//調(diào)用子類的func
如果它不是虛的,P->func將調(diào)用父類的原始函數(shù)。
java語言可以通過什么實(shí)現(xiàn)多繼承?
1. Java只能用接口實(shí)現(xiàn)多個(gè)實(shí)現(xiàn),類似于多重繼承
2。在Java中實(shí)現(xiàn)多重繼承的唯一方法是在接口之間。
讓我們從繼承開始,例如
class fu1
{
void show(){}]}
]class fu2
{
void show(){}]}
class Zi extensions fu1,fu2
{
void show(){}]}
]創(chuàng)建Zi引用以調(diào)用show方法時(shí),Java虛擬機(jī)不知道要調(diào)用父類的哪個(gè)show方法
]類fu1
{
void show()]}
]類fu2
{
]void show()]}
]類Zi擴(kuò)展fu1,fu2
{
void show(){}
}
fu1和F2的show方法是抽象的,沒有方法體
所以只有子類的show方法都有方法體,所以接口可以實(shí)現(xiàn)的更多,也就是變量的多重繼承
所以可以推斷接口可以繼承的更多,甚至接口a B和C的父接口都有相同的show()方法
但是它們都是抽象方法。A繼承了它們,它們也是抽象的。這個(gè)不能繼承嗎?從實(shí)現(xiàn)示例可以推斷接口可以繼承多個(gè)。
Java集合類庫的頂層里的Collection,List,Set是抽象類的話是否更“正確”一些?
不正確。Java是單繼承。如果頂層是抽象類,對(duì)以后的代碼擴(kuò)展非常不利。java接口是多實(shí)現(xiàn)的,java官方設(shè)計(jì)為集合和集合,列表也是接口設(shè)計(jì),符合java接口實(shí)現(xiàn)的特點(diǎn)。如果它們都被設(shè)計(jì)成抽象類,我們將無法在實(shí)際開發(fā)中實(shí)現(xiàn)我們自己的類。具體結(jié)構(gòu)如下:
collection interface的接口對(duì)象集合(單列集合)
ζ-list interface:元素按條目順序保存,可以重復(fù)
│--ζLinkedList接口實(shí)現(xiàn)類,鏈表,插入刪除,不同步,行不安全
│--ζArrayList接口實(shí)現(xiàn)類,數(shù)組,隨機(jī)訪問,無同步,線程不安全!---向量接口實(shí)現(xiàn)類數(shù)組,同步,線程安全!-------stack是vector類的實(shí)現(xiàn)類
----set接口:只接收一次,不能重復(fù),做內(nèi)部排序
ζ-----HashSet使用哈希表(數(shù)組)存儲(chǔ)元素
TreeSet的底層實(shí)現(xiàn)是二叉樹,元素按順序排列