摘要:面向?qū)ο缶幊趟枷朊嫦驅(qū)ο?,?jiǎn)單來(lái)說就是由動(dòng)作的執(zhí)行者變?yōu)閯?dòng)作的操控者。面向?qū)ο笫窍鄬?duì)于面向過程的。面向?qū)ο笕筇卣髅嫦驅(qū)ο笥腥筇卣?,即封裝繼承和多態(tài)。接口和抽象類接口接口名方法方法,默認(rèn)修飾符為,不能用其他修飾符修飾接口。
面向?qū)ο缶幊趟枷?/b>
面向?qū)ο?,?jiǎn)單來(lái)說就是由動(dòng)作的執(zhí)行者變?yōu)閯?dòng)作的操控者。結(jié)合具體例子來(lái)說就是使用某個(gè)人或者工具所具有的功能而不用去管功能的具體實(shí)現(xiàn)方式。例如現(xiàn)實(shí)中的項(xiàng)目開發(fā),老板想要實(shí)現(xiàn)某些功能,但是他自己不會(huì)這些技術(shù),所以他就會(huì)讓員工去做這些事情,通過借助別的擁有你想要實(shí)現(xiàn)某些功能的過程就可以理解為面向?qū)ο?。面向?qū)ο笫窍鄬?duì)于面向過程的。
類與對(duì)象
接著來(lái)了解下什么是 類與對(duì)象,世界是由什么組成的?我們這樣考慮,世界是由動(dòng)物、植物等組成的,動(dòng)物又分為哺乳動(dòng)物和非哺乳動(dòng)物,哺乳動(dòng)物又分為老虎、獅子、大象... ...可以繼續(xù)分類下去。通過這個(gè)例子我們對(duì)人類進(jìn)行分析,人都會(huì)直立行走、會(huì)說話、有兩個(gè)眼睛一個(gè)鼻子、會(huì)使用工具、會(huì)勞動(dòng)、會(huì)創(chuàng)造工具等特征,這就是人區(qū)別于其他動(dòng)物的原因,當(dāng)某個(gè)事物符合了人所具有的所有特征,我們就說他是一個(gè)人,老虎、獅子、海豚等不具備”人類“的某些特征,所以它們不是人。但是要注意:類不是具體的事物,而是由個(gè)體組成的集合。這樣的個(gè)體就叫做對(duì)象。
所以,類描述了一組有相同特性(屬性)和相同行為(方法)的對(duì)象。
面向?qū)ο笕筇卣?/strong>
面向?qū)ο笥腥筇卣鳎?strong>封裝、繼承和多態(tài)。
封裝
封裝,也就是隱藏,隱藏對(duì)象功能的實(shí)現(xiàn)細(xì)節(jié)和屬性或者不需要用戶知道的內(nèi)容,只提供與外部聯(lián)系的接口供用戶使用。
封裝的好處
1、減少代碼的耦合性,使代碼更加精簡(jiǎn)。
2、提高代碼的復(fù)用性,不必再重復(fù)寫功能相近的代碼。
封裝的具體實(shí)現(xiàn)就是將某一功能或?qū)傩猿殡x出來(lái),獨(dú)立寫成多帶帶的方法或類,對(duì)類及其屬性和方法設(shè)置訪問權(quán)限限定該功能或?qū)傩钥梢员惶囟ǖ脑L問者訪問,訪問權(quán)限有public、protected、private和默認(rèn)。
public:在任何類中都能訪問,即使不在同一包中。
protected:只能在本包和子類中訪問,即使子類不和父類在同一包中,也能訪問到。
private:只能在本類中被訪問,子類也訪問不到。
默認(rèn):只能在同一個(gè)包中被訪問到。
注意:類只能訪問其他類的public和protected修飾的屬性和方法,不能訪問到private修飾的。
來(lái)看具體例子:
public class Person { private String name; private int age; private String id; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } }
這個(gè)簡(jiǎn)單的例子把人屬性封裝了進(jìn)去,外部只能調(diào)用相應(yīng)的get和set方法來(lái)對(duì)屬性進(jìn)行操作。
繼承
假設(shè)在描述某些事物的時(shí)候我們會(huì)發(fā)現(xiàn)他們具有許多相同的地方,例如鳥類,每種鳥都有眼睛,嘴巴,都會(huì)吃東西等,這些相同的地方可以把他們抽取出來(lái)定義成一個(gè)鳥類,當(dāng)需要描述多種鳥時(shí)就不用再重復(fù)定義這些共性,直接繼承鳥類即可,不必再重新續(xù)寫重復(fù)內(nèi)容。
注意:Java的繼承不是像C++一樣,Java只存在單繼承且智只能繼承父類的非私有成員,使用extends ,在調(diào)用子類構(gòu)造方法時(shí)會(huì)調(diào)用父類無(wú)參構(gòu)造方法,若父類沒有無(wú)參構(gòu)造,注意為其添加無(wú)參構(gòu)造方法。super()方法可調(diào)用父類方法或變量。繼承提高了程序的復(fù)用性、擴(kuò)展性,也是 多態(tài)特征的前提。
super和this的區(qū)別:
super(參數(shù)):調(diào)用父類的某一構(gòu)造函數(shù)
super.方法:調(diào)用父類中的方法;
super.變量名:調(diào)用父類中的變量
this:代表當(dāng)前對(duì)象名
this與super如果要在構(gòu)造函數(shù)里使用則都必須在構(gòu)造函數(shù)的第一行,所以不能同時(shí)存在與構(gòu)造函數(shù)里。
因?yàn)閟tatic不包含對(duì)象,this和super代表對(duì)象,所以不能在static域中使用super和this。
接口和抽象類
接口:interface 接口名{方法1;方法2…},默認(rèn)修飾符為 public ,不能用其他修飾符修飾接口。
抽象類:當(dāng)多個(gè)類都存在相同方法名,但是其實(shí)現(xiàn)方式卻不相同時(shí)可以將它們進(jìn)行抽取,定義成一個(gè)類,只有方法名沒有具體實(shí)現(xiàn),abstract class 類名{ abstract void…方法名();}
注意:僅實(shí)現(xiàn)抽象類的部分功能的類還是抽象類。抽象類除了不能被實(shí)例化外和正常類沒什么區(qū)別。
接口與抽象類的區(qū)別:接口可以被實(shí)現(xiàn)多個(gè)中間用逗號(hào)隔開,使用 implements 關(guān)鍵字實(shí)現(xiàn)接口,實(shí)現(xiàn)了接口類必須全部實(shí)現(xiàn)接口中的方法。如果基本功能在不斷改變,那么就需要使用抽象類。如果不斷改變基本功能并且使用接口,那么就需要改變所有實(shí)現(xiàn)了該接口的類。抽象類可以提供成員方法的實(shí)現(xiàn)細(xì)節(jié),而接口中只能存在public abstract 方法;抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是public static final類型的;繼承抽象類如果不實(shí)現(xiàn)所有的抽象方法,子類必須聲明為抽象類。
java不支持多繼承,但是可以實(shí)現(xiàn)多個(gè)接口,形如
class Main extends A implements B,C...{ }
稍微注意下,接口之間也可以繼承,而且是可以多繼承(了解一下就行了,基本不提這個(gè))。
多態(tài)
多態(tài)是同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力。
多態(tài)存在的三個(gè)必要條件
繼承
重寫
父類引用指向子類對(duì)象
java的多態(tài)中涉及到向上轉(zhuǎn)型和向下轉(zhuǎn)型。
Father f = new Child();
上面的例子為向上轉(zhuǎn)型,父類引用指向子類對(duì)象。
Father f = new Child(); Child c = (Child) f;
向下轉(zhuǎn)型即當(dāng)我們有一個(gè)父類對(duì)象時(shí),我們想要實(shí)現(xiàn)子類中的某些方法功能時(shí)就需要向下轉(zhuǎn)型,上面的例子為向下轉(zhuǎn)型。
用一個(gè)具體的實(shí)例說明向上轉(zhuǎn)型與向下轉(zhuǎn)型
abstract class Animal{ public abstract void eat(); public abstract void sleep(); } class Cat extends Animal{ public void eat() { System.out.println("貓吃魚"); } public void sleep() { System.out.println("貓睡覺"); } public void ability() { System.out.println("貓抓老鼠"); } } class Dog extends Animal { public void eat() { System.out.println("狗吃骨頭"); } public void sleep() { System.out.println("狗睡覺"); } public void ability() { System.out.println("狗看家"); } } public class DuoTai{ public static void main(String[] args){ Animal a = new Cat();//自動(dòng)向上轉(zhuǎn)型 a.sleep(); //Animal 類中定義了此方法,而子類中也重寫了此方法,調(diào)用的是子類中的sleep()方法 a.eat(); //a.ability(); 編譯失敗,因?yàn)?a是父類Animal類的引用,而Animal類中未定義此方法,所以會(huì)報(bào)錯(cuò) getAbility(a); } public static void getAbility(Animal a){ if(a instanceof Cat) { Cat c = (Cat) a;//向下轉(zhuǎn)型,使用instanceof關(guān)鍵字判斷是否是指定類的對(duì)象 c.ability(); } if(a instanceof Dog){ Dog d = (Dogs) a; d.ability(); } } } /** * 執(zhí)行結(jié)果為: * 貓睡覺 * 貓吃魚 * 貓抓老鼠 */
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/77402.html
摘要:面向?qū)ο蟮娜筇卣鞣庋b繼承多態(tài)。以本文為例,類中的變量為私有變量,只能通過創(chuàng)建對(duì)象此時(shí)構(gòu)造方法自動(dòng)調(diào)用來(lái)賦值。 java面向?qū)ο蟮娜筇卣鳎悍庋b、繼承、多態(tài)。 以本文為例,User類中的變量為私有變量,只能通過創(chuàng)建對(duì)象(此時(shí)構(gòu)造方法自動(dòng)調(diào)用)來(lái)賦值。外界只能通過公有方法api()來(lái)訪問User類。 Admin類繼承了User類,調(diào)用了其構(gòu)造方法,還重寫了method_1方法,增加了...
摘要:什么是面向?qū)ο蟊疚牟辉谡撌?。接下?lái)說一下面向?qū)ο蟮娜筇卣髟诋?dāng)中的實(shí)現(xiàn)。封裝實(shí)現(xiàn)封裝實(shí)現(xiàn)就是是對(duì)象內(nèi)部的變化對(duì)外界是透明的不可見。這種做法使對(duì)象之間低耦合便于維護(hù)升級(jí)團(tuán)隊(duì)協(xié)作開發(fā)。。 概述 本來(lái)打算寫設(shè)計(jì)模式的,在談?wù)搄s的設(shè)計(jì)模式之前先說一下js的面向?qū)ο?因?yàn)楹芏嘣O(shè)計(jì)模式的實(shí)現(xiàn)都摻雜著面向?qū)ο蟮乃枷?所以先做一下前期鋪墊。 js我們都知道是一種動(dòng)態(tài)類型腳本型語(yǔ)言,變量類型無(wú)法保證,...
摘要:二封裝封裝性就是把類對(duì)象的屬性和行為結(jié)合成一個(gè)獨(dú)立的相同單位,并盡可能隱蔽類對(duì)象的內(nèi)部細(xì)節(jié),對(duì)外形成一個(gè)邊界,只保留有限的對(duì)外接口使之與外部發(fā)生聯(lián)系。 javascript的面向?qū)ο?面向?qū)ο蟮奶攸c(diǎn)分為三類:繼承 封裝 多態(tài) 首先你得理解面向過程:假如把一件東西放到一個(gè)箱子里,面向過程就是第一部打開箱子,然后把東西放進(jìn)去,然后關(guān)閉箱子: 面向?qū)ο?就是把箱子看成一個(gè)對(duì)象,這個(gè)...
摘要:類用于描述客觀世界里某一類對(duì)象的共同特征,而對(duì)象則是類的具體的存在,程序使用類的構(gòu)造器來(lái)創(chuàng)建該類的對(duì)象。也支持面向?qū)ο蟮娜筇卣鞣庋b繼承和多態(tài)。構(gòu)造器用于對(duì)類實(shí)例進(jìn)行初始化操作,構(gòu)造器支持重載。 Java是面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,Java語(yǔ)言提供了定義類、成員變量、方法等最基本的功能。類可被認(rèn)為是一種自定義的數(shù)據(jù)類型,可以使用類來(lái)定義變量。類用于描述客觀世界里某一類對(duì)象的共同特征,而對(duì)...
閱讀 3317·2023-04-25 15:44
閱讀 1964·2019-08-30 13:11
閱讀 2962·2019-08-30 11:11
閱讀 3178·2019-08-29 17:21
閱讀 1381·2019-08-29 15:38
閱讀 1032·2019-08-29 12:49
閱讀 1890·2019-08-28 18:19
閱讀 3298·2019-08-26 14:01