面向对象的三大特征,封装、继承、多态的个人理解以及代码分析
面向過程:我們以前使用的是面向過程編程,你需要清除每個實現步驟,每個步驟每行代碼都要仔仔細細的編寫,
不知道過程就找不到結果,找到實現過程就可以得到實現結果。
例如: 我們在外打工租房子,我們需要了解每個每個房屋的出租信息,不然是找不到房子的。
面向對象:對象幫我們做事情,找到對應的對象我們就可以得到想要的結果。
?? 例如: 我們找房子不在如此的繁瑣,只要找到中介我們就不怕沒有地方住,中介會幫你找房子,你只需支付對應的服務費即可。
面向對象的三大特征給我們帶了巨大的好處,下面我們就來講解一下。
1.什么是封裝?
1.1 封裝是面向對象的三大特征之一。
1.2 它就是把細節信息封裝起來,對外提供操作它的對應的方法。
例如:就像一輛車,你從來不關心它是怎么建造的,你只需要懂怎么操作它就可以了。
2.怎么實現封裝
2.1 封裝的實現方式就是將你需要封裝屬性提到一個公共的類中,
將屬性私有化,對外提供setter,getter方法,對需要重復使用的實現過程進行抽取為方法。
3.封裝的好處
3.1 封裝使整個軟件開發復雜度大大降低。
3.2 將需要重復使用的實現過程進行封裝,提高代碼的重用性。
3.3 你只需找到其對應的方法即可,無需關系它是怎么實現的。
3.4 私有化數據將數據隱藏,對無需安全考慮的數據通過setter,getter往外提供,對需要考慮安全問題的數據進行私有化。
3.5 你可以對其參數進行限定,適應你的業務范圍。
例如:就像年齡一樣,你聲明的參數類型為int,int是可以為負值的,
但是在我們的現實生活中,
年齡是沒有負值的,這時你可以將年齡對應的setter方法內添加一個
if-else if-else來限制它的范圍
1.1 繼承就是將共有特征或者行為進行向上抽取,將其共有的東西進行實現或者抽象化。
例如:小明跟小麗都有年齡、性別和名字,人類也有這三個特征,
人類的范疇比小明小麗這個特有個體的范圍大,所以可以將年齡、
性別和名字這三個特征向上抽取。
小明跟小麗都是人,都有吃東西這個功能,所以可以向上抽取,
但是小明可能是南方人,小麗可能是北方人,一個是吃面食,一個是吃水稻的。
所以可以將這個共有的行為抽象化。讓小明小麗這個特有的個體來進行實現。
2.怎么樣繼承
2.1 只需將共有的特征或者行為封裝為對象,然后使用extends這個關鍵字進行繼承即可。
如有抽象方法需要對抽象方法進行實現。
3.繼承的好處
3.1 繼承的好處是對共有的屬性或者行為進行向上提取,降低了代碼的復雜度。
3.2 繼承為實現多態提供了前提,沒有繼承就沒有多態。
4.注意事項
4.1 繼承時子類共有方法會覆蓋父類的共有方法。
例如:子類父類都有吃東西的方法,子類是吃飯,而父類是吃東西,
在使用多態類創建對象( Fu fu = new Zi() )時,調用eat方法是時,會是吃東西而不是吃飯。
4.2 繼承時子類屬性不會覆蓋父類的屬性。 package com.jq;/*** 繼承*/ abstract class human {//抽取共有特征 String name;int age;//抽取共有方法,特有行為讓其子類實現public abstract void eat();@Overridepublic String toString() {return "human{" +"name='" + name + '\'' +", age=" + age +'}';} } class XiaoMing extends human{public XiaoMing() {super.name="小明";super.age=25;}public void eat() {System.out.println("吃面");} } class XiaoLi extends human{public XiaoLi() {super.name="小麗";super.age=18;}public void eat() {System.out.println("吃面");} } public class ExtendsDemo {public static void main(String[] args) {System.out.println(new XiaoMing());System.out.println(new XiaoLi());}} 1.什么是多態
1.1 多態就是同一個事物但是他具有多種形態。
例如: 一只二哈,二哈是一只狗,二哈是犬科動物,二哈是一直動物,這就是多態。
2.怎么實現多態
2.1 只需具有繼承關系,然后進行類型轉換即可。
3.多態的好處
3.1 多態切換多種形態來使用特有的方法。
4.多態的弊端
4.1 只能使用本形態下的屬性和方法。
4.2 如果在使用數組或者沒有使用泛型的集合內的對象時,需要用到子類特有的方法,必須用instanceof這個關鍵字來進行類型判斷,
否則有可能會出現ClassCastException這個異常。 package com.jq;/*** 多態*/ class Dog {String name="二哈";public void call(){System.out.println("汪汪汪汪");}} class erha extends Dog {public void eat(){System.out.println("吃的一手好狗糧");} } class xiaomao {public void call(){System.out.println("喵喵喵");}} public class PolymorphicDemo {public static void main(String[] args) {Object[] animal = {new erha(),new xiaomao()};for (Object o : animal) {/*Dog dog =(Dog)o;dog.call();以上代碼會拋異常 java.lang.ClassCastException: com.jq.xiaomao cannot be cast to com.jq.Dog*/if(o instanceof Dog){Dog dog =(Dog)o;dog.call();}else if(o instanceof xiaomao){xiaomao cat =(xiaomao)o;cat.call();}}}}
?
轉載于:https://www.cnblogs.com/GGYC/p/10947052.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的面向对象的三大特征,封装、继承、多态的个人理解以及代码分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详细文档设计1
- 下一篇: python 需求分析