Java中物件導向的三大特徵 繼承 封裝 多型

2021-09-23 07:53:57 字數 3654 閱讀 5920

繼承、封裝、多型

是物件和類概念的主要特徵

封裝:即把客觀事物封裝成抽象的類,並且類可以對自己的資料和方法進行許可權控制,

封裝就是指利用抽象資料型別將資料和基於資料的操作封裝在一起,資料被保護在抽象型別的內部,系統的其他部分只有通過包裹在資料外面的被授權的操作,才能夠與這個抽象資料型別交流與互動!

將變化隔離

便於使用

提高安全性

提高重用性

封裝隱藏了類的內部實現機制,可以在不影響使用的情況下改變類的內部結構,同時也保護了資料。對外界而已它的內部細節是隱藏的,暴露給外界的只是它的訪問方法。

繼承:繼承是使用已存在的類的定義作為基礎建立新的類,新類的定義可以增加新的資料或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。通過使用繼承我們能夠非常方便地復用以前的**,能夠大大的提高開發的效率。

繼承的特點:

子類擁有父類非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的許可權是最高的,只有在同乙個類裡面才能使用該修飾符...