JavaSE(二十)——面向对象的概念及三个基本特征
文章目錄
- 1. 面向?qū)ο蟮母拍?/li>
- 2. 面向?qū)ο蟮娜齻€(gè)基本特征
- 2.1 封裝
- 2.2 繼承
- 2.3 多態(tài)
1. 面向?qū)ο蟮母拍?/h1>
- 面向?qū)ο笫且环N符合人類(lèi)思維習(xí)慣的編程思想。現(xiàn)實(shí)生活中存在各種形態(tài)不同的事物,這些事物之間存在著各種各樣的聯(lián)系。
- 在程序中使用對(duì)象來(lái)映射現(xiàn)實(shí)中的事物,使用對(duì)象的關(guān)系來(lái)描述事物之間的聯(lián)系,這種思想就是面向?qū)ο蟆?/li>
- 提到面向?qū)ο?#xff0c;自然會(huì)想到面向過(guò)程,面向過(guò)程就是分析解決問(wèn)題所需要的步驟,然后用函數(shù)把這些步驟一一實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了。
- 面向?qū)ο髣t是把解決的問(wèn)題按照一定規(guī)則劃分為多個(gè)獨(dú)立的對(duì)象,然后通過(guò)調(diào)用對(duì)象的方法來(lái)解決問(wèn)題。
- 當(dāng)然,一個(gè)應(yīng)用程序會(huì)包含多個(gè)對(duì)象,通過(guò)多個(gè)對(duì)象的相互配合來(lái)實(shí)現(xiàn)應(yīng)用程序的功能,這樣當(dāng)應(yīng)用程序功能發(fā)生變動(dòng)時(shí),只需要修改個(gè)別的對(duì)象就可以了,從而使代碼更容易得到維護(hù)。
2. 面向?qū)ο蟮娜齻€(gè)基本特征
2.1 封裝
定義: 封裝是將客觀事物封裝成抽象類(lèi), 并且類(lèi)可以把自己的數(shù)據(jù)和方法只讓可信的類(lèi)或者對(duì)象操作,對(duì)不可信的進(jìn)行信息隱藏。
舉例:
public class Person{private String name;private int age;private String sex;public String getName(){return name;}public void setName(String name){this.name = name;}private int getAge(){return age;}private void setAge(int age){this.age = age;}public void setSex(String sex){this.sex = sex;} }如果沒(méi)有set()和get()方法,那么Person類(lèi)應(yīng)該是這樣的:
public class Person { public String name ; public int age ; private String sex;}需要這樣使用它:
Person person = new Person(); person.age = 18; person.name = "小胖"; person.sex = "男";封裝好處:
(1)如果需要修改Person,比如將sex修改為int類(lèi)型,幾十或者上百個(gè)這樣的地方需要修改,工作量極大,如果封裝了,只需要修改setAge()方法就好了。
(2)針對(duì)某些成員變量,不想讓其他類(lèi)知道其值的大小,就可以不去做get()操作,比如Person類(lèi)中的sex,不想讓其他人知道性別,就不做getSex()。
(3)private修飾的成員變量以及成員方法,無(wú)法在類(lèi)外調(diào)用,起到了隱藏的作用。
2.2 繼承
定義: 繼承是從己有的類(lèi)中派生出的新的類(lèi),新的類(lèi)能夠吸收己有類(lèi)的數(shù)據(jù)屬性和行為,并能擴(kuò)展新
的屬性和行為。關(guān)鍵字(extends)讓類(lèi)與類(lèi)之間產(chǎn)生繼承關(guān)系。
舉例:
//Dog是子類(lèi),Animal是父類(lèi) class Dog extends Animal{ }注意: Java中類(lèi)不支持多繼承,單繼承可以使繼承關(guān)系變得簡(jiǎn)單,一個(gè)類(lèi)只能有一個(gè)父類(lèi),一
個(gè)類(lèi)可以繼承多個(gè)接口 接口支持多繼承。
2.3 多態(tài)
定義: 多態(tài)指不同類(lèi)對(duì)象對(duì)同一消息做出的響應(yīng)。
重寫(xiě)和重載:
(1)方法的重寫(xiě)Overriding和重載Overloading都是實(shí)現(xiàn)多態(tài)的方式,區(qū)別在于前者實(shí)現(xiàn)的是編譯時(shí)的多態(tài)性,而后者實(shí)現(xiàn)的是運(yùn)行時(shí)的多態(tài)性。
(2)重寫(xiě)發(fā)生在子類(lèi)與父類(lèi)之間,重寫(xiě)要求子類(lèi)被重寫(xiě)方法與父類(lèi)被重寫(xiě)方法有相同的返回類(lèi)型,比父類(lèi)被重寫(xiě)方法更好訪問(wèn),不能比父類(lèi)被重寫(xiě)方法聲明更多的異常(里氏代換原則)。
(3)重載發(fā)生在同一個(gè)類(lèi)中,同名的方法如果有不同的參數(shù)列表(參數(shù)類(lèi)型不同、參數(shù)個(gè)數(shù)不同或者二者都不同)則視為重載;重載對(duì)返回類(lèi)型沒(méi)有特殊的要求,對(duì)訪問(wèn)權(quán)限也沒(méi)有要求。
多態(tài)的三個(gè)必要條件
(1)繼承
在多態(tài)中必須存在有繼承關(guān)系的子類(lèi)和父類(lèi)。基于繼承的實(shí)現(xiàn)機(jī)制主要表現(xiàn)在父類(lèi)和繼承該父類(lèi)的一個(gè)或多個(gè)子類(lèi)對(duì)某些方法的重寫(xiě),多個(gè)子類(lèi)對(duì)同一方法的重寫(xiě)可以表現(xiàn)出不同的行為。
(2)重寫(xiě)
子類(lèi)對(duì)父類(lèi)中某些方法進(jìn)行重新定義,在調(diào)用這些方法時(shí)就會(huì)調(diào)用子類(lèi)的方法。
(3)向上轉(zhuǎn)型
在多態(tài)中需要將子類(lèi)的引用賦給父類(lèi)對(duì)象,只有這樣該引用才能夠具備技能調(diào)用父類(lèi)的方法和子類(lèi)的方法。
總結(jié)
以上是生活随笔為你收集整理的JavaSE(二十)——面向对象的概念及三个基本特征的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JavaSE(十九)——equals()
- 下一篇: JavaSE(二十一)——栈和队列、栈和