Java的封裝、繼承砂碉、多態(tài) 包

目錄:

面向?qū)ο蟮娜筇卣鳎悍庋b蛀蜜、繼承、多態(tài)

方法重寫

super

instanceof

面向?qū)ο蟮娜筇卣鳎悍庋b增蹭、繼承滴某、多態(tài)

封裝

??? —? 合理隱藏(private)

??? —? 合理暴露(protected、public)

隱藏不想被外界操作的field滋迈、方法霎奢、構(gòu)造器

暴露一般就是希望給別人調(diào)用的方法。

封裝的目的:A饼灿。簡化編程

???????????????????? B幕侠。能更好的保證對(duì)象的完整性

為了實(shí)現(xiàn)隱藏,我們有 4 個(gè)修飾符

??? private ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? —? 當(dāng)前類訪問權(quán)限

??? 沒有訪問權(quán)限修飾符 ? ? ? ? ? ?? —? 包訪問權(quán)限

??? protected?????????????????????????????? —? 子類訪問權(quán)限

??? public??????????????????????????????????? —? 公共訪問權(quán)限


private ? → ? 默認(rèn)訪問權(quán)限 ? → ? protected ? → ? public

private?? ? ? ? ?? —??? 專門用于隱藏field

public? ? ? ? ? ?? —??? 專門用于暴露方法

protected? ? ?? —? ? protected 修飾的方法碍彭,通常是希望被它子類訪問

默認(rèn)?????????????? —??? 希望在同一個(gè)包中被訪問的成分


java訪問權(quán)限修飾符


局部變量??? —??? 它僅在方法內(nèi)有效晤硕,甚至僅在代碼塊內(nèi)有效

????????????????????????? 它的作用域本身就小的可憐悼潭。連方法都出不了

????????????????????????? 所以它用訪問權(quán)限修飾符,都是多余

繼承

繼承表達(dá)的是一種 “是(is a)”的關(guān)系舞箍,組合表達(dá)的是一種“有(has a)”的關(guān)系舰褪。

Java的繼承?? —? 一個(gè)類與另一個(gè)類的關(guān)系

??????????????????????????? extends? -? 擴(kuò)展

???????????????????????????? “is a”

???????????????????????????? 類與類之間的關(guān)系:從 “一般到特殊” 的關(guān)系

? ? ? ? ? ? ? ? ? ? ? ? ? ?? 人? →? 老師? → IT老師? →? Java老師

? ? ? ? ? ? ? ? ? ? ? ? ? ?? 父類(基類、超類)? →? 子類

??? 現(xiàn)實(shí)的繼承?? —? 一個(gè)實(shí)例與另一個(gè)實(shí)例的關(guān)系疏橄。

???????????????? ? ?? ? ? ??? “撈錢”

?? Java 的繼承是? 單繼承占拍,extends 后只有一個(gè)父類。

?? 子類繼承了父類软族,就可以獲得父類的 Field 和方法刷喜。

? 如果你定義的Java類沒有顯式指定父類,系統(tǒng)會(huì)默認(rèn)讓它繼承 Object 類

? “一切類立砸,都是Object類的子類”

方法重載(Overload):兩同(同一個(gè)類掖疮,方法名相同),一個(gè)不同(形參)

方法重寫(Override颗祝,也叫覆蓋):兩同浊闪、兩小、一大

????????????? 兩同:方法名螺戳,形參列表相同

? ? ? ? ? ? ? 兩懈楸觥:子類重寫的方法的返回值類型必須比父類方法的返回值類型更小,或相等

? ? ? ? ? ? ? ? ? ? ? ? 子類重寫的方法的聲明拋出的異常必須比父類方法聲明拋出的異常更小倔幼,或相等

?? ? ???????? 一大:子類重寫的方法的訪問權(quán)限必須比父類方法的訪問權(quán)限更大盖腿,或相等

@Override? // @Override 是讓編譯器執(zhí)行更嚴(yán)格的檢查,要求被修飾的方法损同,必須是重寫父類的方法

super

??? —? super 限定:強(qiáng)制去父類的方法

??? —? super調(diào)用:用于顯式調(diào)用父類的構(gòu)造器

??? 規(guī)則:子類的構(gòu)造器【總會(huì)】調(diào)用父類的構(gòu)造器【一次】

??????????????? 默認(rèn)的情況下翩腐,子類構(gòu)造器會(huì)自動(dòng)調(diào)用父類無參數(shù)的構(gòu)造器

??????????????? 如果希望明確指定子類構(gòu)造器調(diào)用父類的哪個(gè)構(gòu)造器,可用super (參數(shù))來調(diào)用

????????? super 調(diào)用必須出現(xiàn)在構(gòu)造器第一行

? ? ? ? ? ? ? ? ? ? ? super調(diào)用和this 調(diào)用都必須出現(xiàn)在構(gòu)造器的第一行膏燃。
? ? ? ? ? ? ? ? ? ? ? ? ? ? super調(diào)用和this 調(diào)用不能 同時(shí)出現(xiàn)

?????? 注意:

???????????????? 1. 如果既沒有super調(diào)用茂卦,也沒有this 調(diào)用

????????????????????? 子類構(gòu)造器會(huì)自動(dòng)先調(diào)用父類無參數(shù)的構(gòu)造器

? ? ? ? ? ? ? ? 2.如果有super調(diào)用

? ? ? ? ? ? ? ? ? ??? 子類構(gòu)造器會(huì)根據(jù)super 調(diào)用傳入的參數(shù)去調(diào)用父類對(duì)應(yīng)的構(gòu)造器

??????????????? 3.如果有this 調(diào)用

????????????????????? 子類構(gòu)造器A會(huì)先找this 調(diào)用所對(duì)應(yīng)類中被重載的構(gòu)造器B。

多態(tài)(Ploymorphism)

由于有如下所示關(guān)系:

??? 父類到子類的關(guān)系:? 從一般到特殊的關(guān)系组哩。

???? Animal a = new Wolf();

A. 第一個(gè)結(jié)論:【子類的實(shí)例等龙,完全可以當(dāng)作父類對(duì)象使用】

??????????????????????????? 父類的引用變量,完全可以指向子類的實(shí)例伶贰。

多態(tài) 同一個(gè)類型的變量蛛砰,在執(zhí)行同一個(gè)方法時(shí),表現(xiàn)出多種行為特征

態(tài)? —? 行為

??????????? 多態(tài)增加了Java語言的靈活性幕袱,也是和設(shè)計(jì)模式緊密相連的暴备。

??????????? Java 的引用變量有兩個(gè)類型:

??????????????????? 編譯時(shí)類型:由聲明它的類型來決定

??????????????????? 運(yùn)行時(shí)類型:由該引用變量實(shí)際所指向的對(duì)象來決定。

????????? 當(dāng)我們【調(diào)用】引用變量時(shí)们豌,它總是呈現(xiàn)出它的【運(yùn)行時(shí)類型】的行為特征涯捻。

????????? 在編譯階段,編譯器并不知道引用變量實(shí)際所引用的對(duì)象的類型

?????????????????????????????? 編譯器只知道它的編譯時(shí)類型

??? 強(qiáng)制類型轉(zhuǎn)換的運(yùn)算符是(類型)

??? 1.基本類型之間(除了boolean 之外)望迎,都可以進(jìn)行轉(zhuǎn)換

??? 2.引用類型之間障癌,只能在具有繼承關(guān)系的兩個(gè)類型之間轉(zhuǎn)換

多態(tài) (包含強(qiáng)制類型轉(zhuǎn)換)? 程序 及 運(yùn)行結(jié)果:

class Person

{

??? public void work()

??? {

?? ? ?? System.out.println("辛勤工作");

??? }

}

class Farmer extends Person

{

??? @Override

??? public void work()

??? {

??????? System.out.println("鋤禾日當(dāng)午");

??? }

}

class Gongpu extends Person

{

??? @Override

??? public void work()

??? {

? ? ??? System.out.println("drinking");

??? }

??? public void drink()

??? {

? ? ? ? System.out.println("我要玩游戲");

? ?? ?? System.out.println("想多了,好好學(xué)習(xí)");

??? }

}

public class 多態(tài)

{

??? public static void main(String[] args)

??? {

??? /*

??? 多態(tài):同一個(gè)類型多個(gè)變量辩尊,在執(zhí)行同一個(gè)方法時(shí)涛浙,

??? 呈現(xiàn)出多種行為特征 — 這就是多態(tài)。

??? */

??? Person p1 = new Person();

??? p1.work();

??? // 子類的實(shí)例摄欲,完全可以當(dāng)作父類對(duì)象使用

??? Person p2 = new Farmer();

??? p2.work();

??? // 子類的實(shí)例轿亮,完全可以當(dāng)作父類對(duì)象使用

??? Person p3 = new Gongpu();

??? p3.work();

??? // 編譯階段,編譯器只知道它的編譯時(shí)類型是Person

??? // 而Person類沒有drink方法胸墙,所以下面代碼是錯(cuò)的

??? // p3.drink(); // 在編譯階段我注,編譯器認(rèn)為p3是Person類型,而非Gongpu


??? // 強(qiáng)制類型轉(zhuǎn)換

??? // gp和p3指向同一個(gè)對(duì)象迟隅,但gp 的編譯時(shí)類型變成了Gongpu

??? Gongpu gp = (Gongpu)p3;

??? gp.drink();

??? }

}

多態(tài)

Classcast (類型轉(zhuǎn)換)? 程序 及 運(yùn)行結(jié)果:

public class Classcast

{

??? public static void main(String[] args)

??? {

??? // "向上轉(zhuǎn)型"

??? Object ob = "Java";

??? /*

??? 1. Object與System之間有繼承關(guān)系但骨,所以可以通過編譯

??? 2. 由于ob運(yùn)行時(shí)類型是String,不是System

??????? 所以強(qiáng)轉(zhuǎn)會(huì)引發(fā)ClassCastException

??? */

??? System sys = (System)ob;

??? }

}

Classcast


instanceof

??????? 判斷前面的變量所引用的對(duì)象智袭,是否為后面類型的實(shí)例奔缠。是返回true,否返回false

? ? ? ? 注意點(diǎn):instanceof 前面操作數(shù)的類型要么與后面的類相同吼野,要么與后面的類有父子繼承關(guān)系校哎,否則會(huì)引起編譯錯(cuò)誤。

InstanceofTest? 程序 及 運(yùn)行結(jié)果:

public class InstanceofTest

{

??? public static void main(String[] args)

??? {

? ?? ?? Object obj = "Hi";

? ?? ?? // obj 的編譯時(shí)類型(Object) 與 String有繼承關(guān)系

? ?? ?? // 因此代碼可以通過編譯

? ?? ?? // 運(yùn)行時(shí)返回true

? ?? ?? System.out.println(obj instanceof String);


? ? ? ? Object ob = new Integer(20);

? ? ? ? // ob 的編譯時(shí)類型(Object) 與 String有繼承關(guān)系

? ? ? ? // 因此代碼可以通過編譯

? ?? ?? // 但運(yùn)行時(shí)返回false

? ?? ?? System.out.println(ob instanceof String);


? ?? ?? Integer in = new Integer(30);

? ?? ?? // ob 的編譯時(shí)類型(Integer) 與 String沒有繼承關(guān)系

? ?? ?? // 因此代碼編譯就報(bào)錯(cuò)瞳步。

? ?? ?? System/out.println(in instanceof String);

??? }

}

InstanceofTest

Test (到底輸出哪個(gè)count闷哆,取決于該引用的變量的聲明時(shí)的類型) 程序 及 運(yùn)行結(jié)果:

class A

{

??? int count = 20;

}

class B extends A

{

??? // 子類的count Field 并不會(huì)覆蓋父類的count。

??? int count = 200;

}

public class Test

{

??? public static void main(String[] args)

??? {

?? ? ?? A a = new A();

? ? ? ? System.out.println(a.count);

? ?? ?? B b = new B();

? ?? ?? // b所引用的對(duì)象有2 個(gè) count Field

? ?? ?? // 到底輸出哪個(gè)count谚攒,取決于該引用的變量的聲明時(shí)的類型

? ?? ?? System.out.println(b.count);

? ? ? ? // 這是典型的“向上轉(zhuǎn)型”

? ?? ?? A ab = b;

? ? ? ? // == 用于判斷兩個(gè)引用變量是否指定同一個(gè)實(shí)例

? ?? ?? // ab所引用的對(duì)象有2 個(gè) count

? ?? ?? // 到底輸出哪個(gè)count阳准,取決于該引用的變量的聲明時(shí)的類型

? ?? ?? System.out.println(ab == b);

? ?? ?? System.out.println(ab.count);

??? }

}

內(nèi)存圖


Test運(yùn)行結(jié)果






包的作用就是“命名空間”的作用。

世界很大馏臭,公司很多野蝇,不同公司定義的類完全有可能出現(xiàn)同名的情況。

Java 要求括儒,一個(gè)類的完整類名绕沈,必須是 “包名 + 類名”。

定義包的語法:

package 包1.包2.包.? 包N帮寻;

包名的規(guī)則:

一般就是你公司的域名的倒寫

??????????????? —— 由于公司域名都是不可重復(fù)的乍狐,這樣就保證不同公司的類的包名不會(huì)重復(fù)。

要把一個(gè)類放入包中固逗,有兩個(gè)要求:

A. 在該類的源代碼中使用package 來聲明包

B. 生成的class 文件必須放在相應(yīng)文件結(jié)構(gòu)下


一旦你為類定義了包后浅蚪,該類的完整類名藕帜,包名 + 類名

當(dāng)我們使用一個(gè)類時(shí),包名 + 類名

為了減少每次都寫包名的繁瑣惜傲,Java 允許使用 import 來導(dǎo)入包下的類

Eg: import? org.java.test.*;? // 此處的*只能代表該包下所有類

普通的 import 是省略包

JDK 1.5提供的靜態(tài)導(dǎo)入???

????????????????? import static — 導(dǎo)入指定類下的靜態(tài)成員

?????????????????????????????????????????? 從而允許省略類洽故。

******************補(bǔ)充:********************

javac 的 -d 選項(xiàng):

可以保證把生成 class 文件放到package 所對(duì)應(yīng)的文件結(jié)構(gòu)下

***************補(bǔ)充:*********************

目前遇到的三個(gè)異常:

1. NullPointerException??????? ——??? 空指針

2.ArrayIndexOutOfBoundsException????? ——??? 數(shù)組越界

3.ClassCastException??????? ——??? 類型轉(zhuǎn)換異常




以上~未完


寫在最后:

當(dāng)初自己買耳機(jī)是為了聽歌,但是買了之后突然發(fā)現(xiàn)就沒怎么聽了盗誊,定一個(gè)小目標(biāo)时甚,每天吃完午飯?zhí)稍谝巫由险J(rèn)真的聽一首歌,什么都不干哈踱,聲音開大荒适,閉著眼。暫且就叫做【每天一首歌】吧

【每天一首歌】【結(jié)婚-李志】

朋友圈看到一個(gè)小學(xué)同學(xué)發(fā)的开镣,就點(diǎn)開來聽刀诬,整個(gè)曲風(fēng)有點(diǎn)凄涼⊙谱樱“只不過是一場生活舅列,只不過是一場命運(yùn),只不過是一場游戲”卧蜓。不太適合現(xiàn)在的我聽~覺得歌曲中傳達(dá)的是一個(gè)比較無奈的婚姻帐要,對(duì)于我自己的愛情觀來說,我不太可能會(huì)陷入這種場景弥奸,雖然見過很多文章說過榨惠,結(jié)婚了以后就會(huì)由愛情轉(zhuǎn)換為親情,那么隨之而來的就不是愛情里的激情了盛霎,就變成了生活赠橙,會(huì)讓你變得乏味,會(huì)消磨了你的激情愤炸,是柴米油鹽醬醋茶~但是我不是很認(rèn)同期揪,我覺得結(jié)婚就是為了給偉大的愛情一個(gè)美好的結(jié)果,不要說我年輕不知愁滋味规个,這是一種態(tài)度凤薛,不管愛情也罷,婚姻也罷诞仓,都是要用心來呵護(hù)的缤苫,要兩個(gè)人一起來運(yùn)營。好看的皮囊很多墅拭,但是有趣的活玲、合得來的靈魂真的可遇不可求~

愿看到本文的你和我都會(huì)有個(gè)好的結(jié)果~

下午看到初中那群兄弟在聊聚會(huì),周末一起嗨,當(dāng)然我回不去了舒憾,突然腦海里冒出一個(gè)詞:初心镀钓。又不禁想起來自己的初心,竟然驚悚的發(fā)現(xiàn)我其實(shí)并沒有一個(gè)明確的初心珍剑,我不知道初心和人生目標(biāo)有沒有交集掸宛∷缆剑回到最初招拙,我想做一個(gè)有價(jià)值的人,可是措译,衡量價(jià)值的標(biāo)準(zhǔn)在哪里别凤,這很大很空,沒有實(shí)際意義领虹,慢慢的规哪,我覺得自己挺想成為別人眼中的那種:有思想,積極向上塌衰,可以用精神思想來感染別人的人诉稍,好吧,我承認(rèn)這樣能裝逼~算了最疆,我還是想先變得有錢吧杯巨。所謂稀缺,缺少什么在意什么吧努酸,太在意反而得不償失服爷,心境還是有待提升。像三傻大鬧寶萊塢里男一获诈,許是我的畢生所求吧仍源,有著自己熱愛的事業(yè),事業(yè)可以得到認(rèn)同舔涎,可以幫助別人笼踩,有著好兄弟,有著相愛的女人~

好了亡嫌,雙手脫離鍵盤嚎于,健身去了~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市昼伴,隨后出現(xiàn)的幾起案子匾旭,更是在濱河造成了極大的恐慌,老刑警劉巖圃郊,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件价涝,死亡現(xiàn)場離奇詭異,居然都是意外死亡持舆,警方通過查閱死者的電腦和手機(jī)色瘩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門伪窖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人居兆,你說我怎么就攤上這事覆山。” “怎么了泥栖?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵灰伟,是天一觀的道長谣光。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么涣雕? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任礁芦,我火速辦了婚禮经窖,結(jié)果婚禮上募谎,老公的妹妹穿的比我還像新娘。我一直安慰自己殊鞭,他們只是感情好遭垛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著操灿,像睡著了一般锯仪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上牲尺,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天卵酪,我揣著相機(jī)與錄音,去河邊找鬼谤碳。 笑死溃卡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜒简。 我是一名探鬼主播瘸羡,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼搓茬!你這毒婦竟也來了犹赖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤卷仑,失蹤者是張志新(化名)和其女友劉穎峻村,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锡凝,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粘昨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片张肾。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芭析,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吞瞪,到底是詐尸還是另有隱情馁启,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布芍秆,位于F島的核電站惯疙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏浪听。R本人自食惡果不足惜螟碎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望迹栓。 院中可真熱鬧,春花似錦俭缓、人聲如沸克伊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愿吹。三九已至,卻和暖如春惜姐,著一層夾襖步出監(jiān)牢的瞬間犁跪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工歹袁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坷衍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓条舔,卻偏偏與公主長得像枫耳,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子孟抗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法迁杨,類相關(guān)的語法,內(nèi)部類的語法凄硼,繼承相關(guān)的語法铅协,異常的語法,線程的語...
    子非魚_t_閱讀 31,639評(píng)論 18 399
  • (一)Java部分 1摊沉、列舉出JAVA中6個(gè)比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,107評(píng)論 0 62
  • 小編費(fèi)力收集:給你想要的面試集合 1.C++或Java中的異常處理機(jī)制的簡單原理和應(yīng)用狐史。 當(dāng)JAVA程序違反了JA...
    八爺君閱讀 4,592評(píng)論 1 114
  • 當(dāng)夜,許栗沒有回家。 我任由他不斷索取预皇,一次又一次侈玄。他就像是一只饕餮,永遠(yuǎn)不知滿足吟温。 當(dāng)我實(shí)在是累到不行的時(shí)候序仙,他...
    蘇小六Six閱讀 170評(píng)論 0 1
  • 天外一雙指向光明的手 在夜的脖子上勒出月亮 夜之巨人,粗粗地喘氣 很快就已無聲無息 路過的村莊都在籌辦葬禮 火車馱...
    左小事界閱讀 140評(píng)論 0 0