繼承、封裝、多型
是物件和類概念的主要特徵
封裝:即把客觀事物封裝成抽象的類,並且類可以對自己的資料和方法進行許可權控制,
封裝就是指利用抽象資料型別將資料和基於資料的操作封裝在一起,資料被保護在抽象型別的內部,系統的其他部分只有通過包裹在資料外面的被授權的操作,才能夠與這個抽象資料型別交流與互動!
將變化隔離
便於使用
提高安全性
提高重用性
封裝隱藏了類的內部實現機制,可以在不影響使用的情況下改變類的內部結構,同時也保護了資料。對外界而已它的內部細節是隱藏的,暴露給外界的只是它的訪問方法。
繼承:繼承是使用已存在的類的定義作為基礎建立新的類,新類的定義可以增加新的資料或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。通過使用繼承我們能夠非常方便地復用以前的**,能夠大大的提高開發的效率。
繼承的特點:
子類擁有父類非private的屬性和方法。
子類可以擁有自己屬性和方法,即子類可以對父類進行擴充套件。
子類可以用自己的方式實現父類的方法。(重寫)。
執行結果:father父類
class father
public string getname()
public father setname(string name)
public int getmoney()
public father setmoney(int money)
public void say()
public void speak()
}子類son繼承父類father
class son extends father
//子類重寫父類的方法
@override
public void say()
//子類過載父類的方法
public void speak(int age)
}public class test
}
栗子分析:我的父親是:李明,他的存款我不知道...
我的父親是:李明,但他的存摺顯示存款為:1000
我的名字是:李小明,年齡:20
父類father有自己的公有屬性name
,私有屬性money
,同時對外提供了所有屬性的公有方法(get/set)
子類son繼承父類father後,擁有父類所有非private的屬性和方法的訪問許可權,子類son同時還可以有自己的屬性(sonname),兒子知道父親的名字卻不知道父親具體的存款,但是可以通過從父類繼承的getmoney()獲取存摺中的存款資訊。
子類可以重寫父類的方法,son類對父類的say方法在保持方法名、引數列表、返回值不變的情況下,對具體的實現進行重寫。
保持上邊**中father、son的內容不變,修改test類的內容如下:
首先來分析下**public class test
}
father s = new son();
: 是向上轉型即父類引用指向子類物件,它是對father的物件的方法的擴充,即father的物件可訪問son從father中繼承來的和son複寫father的方法,其它的方法都不能訪問,包括father中的私有成員方法。
s.speak(20);
:此處報錯,正是因為speak(int age)
方法屬於子類自己的方法而不是從父類繼承而來,在向上轉型過程中,父類物件s會遺棄子類中的該方法
繼承實際上是存在於物件導向程式中的兩個類之間的關係。當乙個類擁有另乙個類的所有資料和操作時,就稱這兩個類之間具有繼承關係!
多型即同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果
多型分為編譯時多型和執行時多型
編譯時多型也稱為靜態多型,主要是指方法的過載,它是根據引數列表的不同來區分不同的函式,通過編譯之後會變成兩個不同的函式,在執行時談不上多型。
執行時多型稱作動態多型,它是通過動態繫結來實現的,也就是我們所說的多型性,只有在執行期才知道是呼叫的那個類的方法。
基於繼承的多型,基於介面的多型,下面分別給出栗子:
基於繼承的多型
執行結果:class father
}class son extends father
}class daughter extends father
}public class test
}
通過基於繼承來實現多型其實是子類對父類的方法進行了重寫,以至於在程式執行時不同的子類對同乙個方法會有不同的執行結果我是父親
我是兒子
我是女兒
2.基於介面的多型:
執行結果:public inte***ce animal
public class dog implements animal
}public class cat implements animal
}public class test
}
通過實現animal介面,不同的物件會有不同的實現,在程式執行時同樣也會有不一樣的執行結果。狗:汪汪汪
貓:喵喵喵
繼承和多型關係密接,多型是基於繼承,繼承和多型的理解每個人都各有不同,下面可以看下乙個非常有趣的題目,被稱為多型迷魂陣
出自部落格:
物件導向的本質是什麼?封裝,繼承,多型是到底用來做什麼的:優先順序由高到低依次為:this.show(o)、super.show(o)、this.show((super)o)、super.show((super)o)。
public class a
public string show(a obj)
}public class b extends a
public string show(a obj)
}public class c extends b
public class d extends b
public class test
}執行結果:
system.out.println("1--" + a1.show(b)); a and a
system.out.println("2--" + a1.show(c)); a and a
system.out.println("3--" + a1.show(d)); a and d
system.out.println("4--" + a2.show(b)); b and a
system.out.println("5--" + a2.show(c)); b and a
system.out.println("6--" + a2.show(d)); a and d
system.out.println("7--" + b.show(b)); b and b
system.out.println("8--" + b.show(c)); b and a
system.out.println("9--" + b.show(d)); a and d
多型迷魂陣:
Java物件導向的三大特徵
訪問許可權修飾符 private 提供的方法 setter getter 關鍵字private可以對類的屬性 方法進行私有化 即封裝 私有的方法只能在本類中被訪問。a類繼承b類後,從b類那繼承到b類的所有屬性和方法 private屬性 方法不能被繼承 關鍵字 extends super protec...
Java物件導向的三大特徵
物件導向的三個基本特徵是 封裝 繼承 多型。1 封裝 封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。2 繼承 物件導向程式設計 oop 語言的乙個主要功能就是 繼承 繼承是指這樣一種能力 它可以使用現有類的所有功能,並在無需重新編...
Java物件導向的三大特徵 封裝
作用 隱藏內部複雜的 只暴露出簡單的訪問方法 高內聚,低耦合 高內聚就是,類的內部資料操作自己完成,不允許外部干涉 低耦合就是,僅暴露少量的方法給外部使用 我們使用訪問控制符,來實現封裝 首先我們有四種訪問控制符。由上圖我們可以看出,private的許可權是最高的,只有在同乙個類裡面才能使用該修飾符...