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