[JAVA]面向?qū)ο蟮娜筇匦?/h1>

學(xué)習(xí)Java的進(jìn)階過程,是理解面向?qū)ο蟮乃枷耄莆彰嫦驅(qū)ο蟮幕驹瓌t以及Java面向?qū)ο蠡緦崿F(xiàn)原理,熟練使用封裝、繼承、多態(tài)的三大特征,接下來我會帶大家進(jìn)一步探索Java世界的奧秘!

一、類和對象

類:是抽象的概念集合,表示的是一個共性的產(chǎn)物,類之中定義的是屬性和行為(方法);
對象:對象是一種個性的表示,表示一個獨立的個體,每個對象擁有自己獨立的屬性,依靠屬性來區(qū)分不同對象。

1.定義類


[修飾符] class 類名
{
零到多個構(gòu)造器定義...
零到多個field...
零到多個方法...
}


  • 定義field的語法格式:
    [修飾符] field 類型 field名[=默認(rèn)值];
  • 定義方法的語法格式:
    [修飾符]方法返回值類型 方法名(形參列表)
    {
    //由零條到多條可執(zhí)行性語句組成的方法體
    }
  • 定義構(gòu)造器是一個特殊的方法:
    [修飾符]構(gòu)造器名(形參列表)
    {
    //由零條到多條可執(zhí)行性語句組成的構(gòu)造器執(zhí)行體
    }

值得指出的是,構(gòu)造器既不能定義返回值類型,也不能使用void沒有返回值定義構(gòu)造器

定義一個類


class Person { // 類名稱首字母大寫
//定義兩個Field
String name ;
int age ;
//定義一個tell方法
public void tell() { // 沒有static
System.out.println("姓名:" + name + ",年齡:" + age) ;
}
}


2.對象的產(chǎn)生和使用

定義和使用對象


public static void main(String args[]) {
Person per = new Person() ;// 聲明并實例化對象
per.name = "張三" ;//操作屬性內(nèi)容
per.age = 30 ;//操作屬性內(nèi)容
per.tell() ;//調(diào)用類中的get()方法
}


二、封裝

1.什么是封裝?

將類的某些信息隱藏在類的內(nèi)部,不允許外部程序直接訪問,而是通過該類的提供方法來實現(xiàn)對隱藏信息的操作和訪問

  • 封裝的好處
    只能通過規(guī)定的方法來實現(xiàn)訪問

2.實現(xiàn)步驟

修改屬性的可見性—>設(shè)為private
創(chuàng)建Getter/setter方法—>用于屬性的讀寫
在getter/setter方法中加入屬性控制語句—>對屬性值的合法性進(jìn)行判斷

3. 使用 java中的包管理類

1.包的作用

  • 管理文件
  • 解決同名文件沖突

2.定義包:package 包名
3.其他文件中使用另一個文件的包通過import關(guān)鍵字

全部必須是小寫

4.java中的訪問修飾符

訪問修飾符 本類 同包 子類 其他
private Y
默認(rèn) Y Y
protect Y Y Y
public Y Y Y Y

5. 內(nèi)部類

內(nèi)部類顧名思義就是定義在類內(nèi)部的另一個類

內(nèi)部類常用的幾種形式分為

  • 成員內(nèi)部類
  • 靜態(tài)內(nèi)部類
  • 方法內(nèi)部類
    接下來分別講解
    (1)內(nèi)部類中最常見的就是成員內(nèi)部類,也稱為普通內(nèi)部類。
    我們來看如下代碼:

運行結(jié)果為:


從上面的代碼中我們可以看到,成員內(nèi)部類的使用方法
1、 Inner 類定義在 Outer 類的內(nèi)部,相當(dāng)于 Outer 類的一個成員變量的位置,Inner 類可以使用任意訪問控制符,如 public 、 protected 、 private 等
2、 Inner 類中定義的 test() 方法可以直接訪問 Outer 類中的數(shù)據(jù),而不受訪問控制符的影響,如直接訪問 Outer 類中的私有屬性a
3、 定義了成員內(nèi)部類后,必須使用外部類對象來創(chuàng)建內(nèi)部類對象,而不能直接去 new 一個內(nèi)部類對象,即:內(nèi)部類 對象名 = 外部類對象.new 內(nèi)部類( );
4、 編譯上面的程序后,會發(fā)現(xiàn)產(chǎn)生了兩個 .class 文件


其中,第二個是外部類的 .class 文件,第一個是內(nèi)部類的 .class 文件,即成員內(nèi)部類的 .class 文件總是這樣:外部類名$內(nèi)部類名.class
另外,友情提示哦:
1、 外部類是不能直接使用內(nèi)部類的成員和方法滴

可先創(chuàng)建內(nèi)部類的對象,然后通過內(nèi)部類的對象來訪問其成員變量和方法。
2、 如果外部類和內(nèi)部類具有相同的成員變量或方法,內(nèi)部類默認(rèn)訪問自己的成員變量或方法,如果要訪問外部類的成員變量,可以使用 this 關(guān)鍵字。如:


運行結(jié)果:


(2)靜態(tài)內(nèi)部類
靜態(tài)內(nèi)部類是 static 修飾的內(nèi)部類,這種內(nèi)部類的特點是:
1、 靜態(tài)內(nèi)部類不能直接訪問外部類的非靜態(tài)成員,但可以通過** new 外部類().成員** 的方式訪問
2、 如果外部類的靜態(tài)成員與內(nèi)部類的成員名稱相同,可通過“類名.靜態(tài)成員”訪問外部類的靜態(tài)成員;如果外部類的靜態(tài)成員與內(nèi)部類的成員名稱不相同,則可通過“成員名”直接調(diào)用外部類的靜態(tài)成員
3、 創(chuàng)建靜態(tài)內(nèi)部類的對象時,不需要外部類的對象,可以直接創(chuàng)建 內(nèi)部類 對象名= new 內(nèi)部類();


運行結(jié)果 :

(3)方法內(nèi)部類
方法內(nèi)部類就是內(nèi)部類定義在外部類的方法中,方法內(nèi)部類只在該方法的內(nèi)部可見,即只在該方法內(nèi)可以使用。

一定要注意哦:由于方法內(nèi)部類不能在外部類的方法以外的地方使用,因此方法內(nèi)部類不能使用訪問控制符和 static 修飾符。

匿名內(nèi)部類這里不做講述,如有興趣可以自行學(xué)習(xí)

三、繼承

1.什么是繼承

定義一個父類,再定義一個子類,讓子類繼承父類,則子類可以使用父類中定義的方法和成員。但是private屬性是不能繼承的。

2.方法的重寫

我們經(jīng)常會遇到這樣的方法,子類繼承了父類的方法,但是對父類方法不滿意,則可以重寫父類的方法,這樣調(diào)用時會優(yōu)先調(diào)用子類重寫的方法,也就是重寫過的方法

繼承的初始化順序
1.初始化父類再子類
2.先初始化對象中的屬性,再執(zhí)行構(gòu)造方法中的初始化

3. java中final的使用

final刻意修飾類、方法、屬性和變量
修飾類不允許被繼承,修飾方法不允許被重寫,修飾屬性不允許隱式的初始化必須有值或在構(gòu)造方法中賦值,修飾變量只能賦一次值變?yōu)槌A?/p>

4. java中的super的使用

  • 在對象的內(nèi)部使用表示父類的對象
    例:如果在子類重寫了父類的方法,想調(diào)用父類的方法時 super.父類的方法名()
  • 子類的構(gòu)造過程中必須調(diào)用父類的構(gòu)造法方法相當(dāng)于默認(rèn)寫了super()
  • 如果顯式調(diào)用構(gòu)造方法(必須運用super方法調(diào)用)必須放在構(gòu)造方法第一行,也就是說super()必須放在子類構(gòu)造方法的第一行
  • 如果父類有一個有參的構(gòu)造法方法,子類又沒有顯式調(diào)用構(gòu)造方法則報錯

5. java中的Object類

object類式所有類的父類,如果一個類沒有使用extends關(guān)鍵字明確標(biāo)識繼承另一個類,那么這個類繼承object類
object類中的方法適合所有子類。
1.tostring()方法
返回對象式哈希code碼(對象地址字符串)
2.equals()方法
比較的是對象的引用是否指向同一塊內(nèi)存地址
Dog dog = new Dog();
Dog dog2 = new Dog();
dog,dog2對象其實是dog指向了兩個個不同的內(nèi)存地址
if(dog.equals(dog2)){
System.out.println("地址值相同");
}else{System.out.println("地址值不相同");}
結(jié)果:地址值不相同

四、多態(tài)

對象的多種形態(tài)

1.引用多態(tài)

父類的引用可以指向本類的對象
父類的引用可以指向子類的對象

2.方法多態(tài)

創(chuàng)建本類的對象時,調(diào)用本類方法
創(chuàng)建子類對象時調(diào)用子類的重寫方法或繼承的方法

3. java 中的抽象類

就像公交車,出租車,摩托車等可以抽象出一個公共的特征是交通工具,有相同的使用方法是出行,那么類似的我們可以把許多類抽象出一個公共類,里面定義共有的成員變量以及方法,這樣的類就是抽象類。定義一個抽象類,包括我們在c++中定義虛函數(shù),這樣的模塊化使用不僅減少了代碼的重復(fù)率,還減輕了開發(fā)人員的工作量,所以在面向?qū)ο蟮木幊趟枷胫校橄箢愂且粋€很重要的運用。

  • 抽象類的定義
    abstract class Instrument {
    // 抽象類中可以有非抽象方法。
    private int i;
    public abstract void play(Note n);
    public String what() { return "Instrument"; }
    public abstract void adjust();
    }

4.java 中的接口

接口則是一個抽象類型,是抽象方法的集合,接口是為了實現(xiàn)不能抽象到一個類的兩個有公共方法的類的方法的抽象。比如飛機(jī)和鳥,兩個都具有相同的方法就是飛行,但是我們不能將飛機(jī)和鳥抽象到一個類里,那么飛機(jī)是一個類,鳥是一個類,同時我們定義一個接口,接口里抽象了飛行這個方法,則飛機(jī)和鳥兩個類都可以通過調(diào)用這個接口實現(xiàn)飛行這個方法的實例化。

  • 定義接口
    [修飾符]interface 接口名[extends 父接口1,extends 父接口2,....]
    {
    零到多個常量定義...public static final
    零到多個抽象方法的定義...public abstract
    }
  • 繼承父類實現(xiàn)接口的語法為:
    [修飾符]class 類名 extends 父類 implements 接口1,接口2 。。

    類體部分//如果繼承了抽象類,需要實現(xiàn)繼承的抽象方法;要實現(xiàn)接口中的抽象方法

5.抽象類和接口的區(qū)別

要知道接口并不是類,編寫接口的方式和類很相似,但是它們屬于不同的概念。類描述對象的屬性和方法。接口則包含類要實現(xiàn)的方法。
1、抽象類和接口都不能直接實例化,如果要實例化,抽象類變量必須指向?qū)崿F(xiàn)所有抽象方法的子類對象,接口變量必須指向?qū)崿F(xiàn)所有接口方法的類對象。
2、抽象類要被子類繼承,接口要被類實現(xiàn)。
3、接口只能做方法申明,抽象類中可以做方法申明,也可以做方法實現(xiàn)
4、接口里定義的變量只能是公共的靜態(tài)的常量,抽象類中的變量是普通變量。
5、抽象類里的抽象方法必須全部被子類所實現(xiàn),如果子類不能全部實現(xiàn)父類抽象方法,那么該子類只能是抽象類。同樣,一個實現(xiàn)接口的時候,如不能全部實現(xiàn)接口方法,那么該類也只能為抽象類。
6、抽象方法只能申明,不能實現(xiàn),接口是設(shè)計的結(jié)果 ,抽象類是重構(gòu)的結(jié)果
7、抽象類里可以沒有抽象方法
8、如果一個類里有抽象方法,那么這個類只能是抽象類
9、抽象方法要被實現(xiàn),所以不能是靜態(tài)的,也不能是私有的。
10、接口可繼承接口,并可多繼承接口,但類只能單根繼承。

end.

作者有話說:
我也是一個java方向技術(shù)小白,所以文章更多的是知識點干貨內(nèi)容,我會往自己的理解方面更多的努力,此篇文章希望可以給予有一定的java語言基礎(chǔ)的程序猿們更多的幫助。如果喜歡我的文章記得關(guān)注我并給我點個贊哦~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,772評論 3 422
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,947評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,960評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,350評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,549評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,104評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,914評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,089評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,340評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,834評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,106評論 2 375

推薦閱讀更多精彩內(nèi)容