JAVA基礎【day07】:面向對象(2)

這輩子沒辦法做太多事情伯病,所以每一件都要做到精彩絕倫凉逛。 --------史蒂夫.喬布斯

代碼塊

(1)用{}括起來的代碼税灌。
(2)分類:
    A:局部代碼塊
        用于限定變量的生命周期,及早釋放陵且,提高內存利用率货葬。
    B:構造代碼塊
        把多個構造方法中相同的代碼可以放到這里,每個構造方法執(zhí)行前贴届,首先執(zhí)行構造代碼塊靠粪。
    C:靜態(tài)代碼塊
        對類的數(shù)據(jù)進行初始化,僅僅只執(zhí)行一次毫蚓。
(3)靜態(tài)代碼塊,構造代碼塊,構造方法的順序問題?
    靜態(tài)代碼塊 > 構造代碼塊 > 構造方法
/*
    代碼塊:在Java中占键,使用{}括起來的代碼被稱為代碼塊。
    根據(jù)其位置和聲明的不同元潘,可以分為
        局部代碼塊:局部位置,用于限定變量的生命周期畔乙。
        構造代碼塊:在類中的成員位置,用{}括起來的代碼牲距。每次調用構造方法執(zhí)行前牍鞠,都會先執(zhí)行構造代碼塊皮服。
            作用:可以把多個構造方法中的共同代碼放到一起,對對象進行初始化硫眯。
        靜態(tài)代碼塊:在類中的成員位置,用{}括起來的代碼,只不過它用static修飾了两入。
            作用:一般是對類進行初始化裹纳。
            
    面試題?
        靜態(tài)代碼塊,構造代碼塊,構造方法的執(zhí)行順序?
        靜態(tài)代碼塊 -- 構造代碼塊 -- 構造方法
        靜態(tài)代碼塊:只執(zhí)行一次
        構造代碼塊:每次調用構造方法都執(zhí)行
*/
class Student {
    static {
        System.out.println("Student 靜態(tài)代碼塊");
    }
    
    {
        System.out.println("Student 構造代碼塊");
    }
    
    public Student() {
        System.out.println("Student 構造方法");
    }
}

class StudentDemo {
    static {
        System.out.println("小源同學都21了,我很傷心");
    }
    
    public static void main(String[] args) {
        System.out.println("我是main方法");
        
        Student s1 = new Student();
        Student s2 = new Student();
    }
}
/*
    寫程序的執(zhí)行結果朋鞍。
    
    小源同學都21了妥箕,我很傷心
    我是main方法
    Student 靜態(tài)代碼塊
    Student 構造代碼塊
    Student 構造方法
    Student 構造代碼塊
    Student 構造方法
*/

繼承

(1)把多個類中相同的成員給提取出來定義到一個獨立的類中。然后讓這多個類和該獨立的類產生一個關系坎吻,
      這多個類就具備了這些內容宇葱。這個關系叫繼承贝搁。
(2)Java中如何表示繼承呢?格式是什么呢?
    A:用關鍵字extends表示
    B:格式:
        class 子類名 extends 父類名 {}
(3)繼承的好處:
    A:提高了代碼的復用性
    B:提高了代碼的維護性
    C:讓類與類產生了一個關系,是多態(tài)的前提
(4)繼承的弊端:
    A:讓類的耦合性增強弦讽。這樣某個類的改變往产,就會影響其他和該類相關的類仿村。
        原則:低耦合蔼囊,高內聚畏鼓。
        耦合:類與類的關系
        內聚:自己完成某件事情的能力
    B:打破了封裝性
(5)Java中繼承的特點
    A:Java中類只支持單繼承
    B:Java中可以多層(重)繼承(繼承體系)
(6)繼承的注意事項:
    A:子類不能繼承父類的私有成員
    B:子類不能繼承父類的構造方法膳沽,但是可以通過super去訪問
    C:不要為了部分功能而去繼承
(7)什么時候使用繼承呢?
    A:繼承體現(xiàn)的是:is a的關系让禀。
    B:采用假設法
(8)Java繼承中的成員關系
    A:成員變量
        a:子類的成員變量名稱和父類中的成員變量名稱不一樣巡揍,這個太簡單
        b:子類的成員變量名稱和父類中的成員變量名稱一樣痛阻,這個怎么訪問呢?
            子類的方法訪問變量的查找順序:
                在子類方法的局部范圍找腮敌,有就使用录平。
                在子類的成員范圍找缀皱,有就使用动猬。
                在父類的成員范圍找啤斗,有就使用。
                找不到赁咙,就報錯钮莲。
    B:構造方法
        a:子類的構造方法默認會去訪問父類的無參構造方法
            是為了子類訪問父類數(shù)據(jù)的初始化
        b:父類中如果沒有無參構造方法彼水,怎么辦?
            子類通過super去明確調用帶參構造
            子類通過this調用本身的其他構造凤覆,但是一定會有一個去訪問了父類的構造
            讓父類提供無參構造
    C:成員方法
        a:子類的成員方法和父類中的成員方法名稱不一樣盯桦,這個太簡單
        b:子類的成員方法和父類中的成員方法名稱一樣,這個怎么訪問呢?
            通過子類對象訪問一個方法的查找順序:
                在子類中找拥峦,有就使用
                在父類中找刑峡,有就使用
                找不到洋闽,就報錯
(9)兩個面試題:
    A:Override和Overload的區(qū)別?Overload是否可以改變返回值類型?
        Override:方法重寫
        Overload:方法重載
        方法重寫:在子類中,出現(xiàn)和父類中一模一樣的方法聲明的現(xiàn)象突梦。
        方法重載:同一個類中诫舅,出現(xiàn)的方法名相同,參數(shù)列表不同的現(xiàn)象阳似。
        方法重載能改變返回值類型骚勘,因為它和返回值類型無關。
            
    B:this和super的區(qū)別和各自的作用?
        this:代表當前類的對象引用
        super:代表父類存儲空間的標識撮奏。(可以理解為父類的引用俏讹,通過這個東西可以訪問父類的成員)  
        場景:
            成員變量:
                this.成員變量
                super.成員變量
            構造方法:
                this(...)
                super(...)
            成員方法:
                this.成員方法
                super.成員方法
                
(10)數(shù)據(jù)初始化的面試題
    A:一個類的初始化過程
    B:子父類的構造執(zhí)行過程
    C:分層初始化
/*
    繼承概述:
        把多個類中相同的內容給提取出來定義到一個類中。
        
    如何實現(xiàn)繼承呢?    
        Java提供了關鍵字:extends
        
    格式:
        class 子類名 extends 父類名 {}
        
    好處:
        A:提高了代碼的復用性
        B:提高了代碼的維護性
        C:讓類與類之間產生了關系畜吊,是多態(tài)的前提
    
    類與類產生了關系泽疆,其實也是繼承的一個弊端:
        類的耦合性增強了。
        
        開發(fā)的原則:低耦合玲献,高內聚殉疼。
        耦合:類與類的關系
        內聚:就是自己完成某件事情的能力
*/

//使用繼承前
/*
class Student {
    public void eat() {
        System.out.println("吃飯");
    }
    
    public void sleep() {
        System.out.println("睡覺");
    }
}

class Teacher {
    public void eat() {
        System.out.println("吃飯");
    }
    
    public void sleep() {
        System.out.println("睡覺");
    }
}
*/

//使用繼承后
class Person {
    public void eat() {
        System.out.println("吃飯");
    }
    
    public void sleep() {
        System.out.println("睡覺");
    }
}

class Student extends Person {}

class Teacher extends Person {}

class ExtendsDemo {
    public static void main(String[] args) {
        Student s = new Student();
        s.eat();
        s.sleep();
        System.out.println("-------------");
        
        Teacher t = new Teacher();
        t.eat();
        t.sleep();
    }
}
/*
    看程序寫結果:
        A:成員變量  就近原則
        B:this和super的問題
            this訪問本類的成員
            super訪問父類的成員
        C:子類構造方法執(zhí)行前默認先執(zhí)行父類的無參構造方法
        D:一個類的初始化過程
            成員變量進行初始化
                默認初始化
                顯示初始化
                構造方法初始化
                
    結果:
        fu
        zi
        30
        20
        10
*/
class Fu{
    public int num = 10;
    public Fu(){
        System.out.println("fu");
    }
}
class Zi extends Fu{
    public int num = 20;
    public Zi(){
        System.out.println("zi");
    }
    public void show(){
        int num = 30;
        System.out.println(num); //30
        System.out.println(this.num); //20
        System.out.println(super.num); //10
    }
}
class ExtendsTest {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.show();
    }
}

?

/*
    看程序寫結果:
        A:一個類的靜態(tài)代碼塊,構造代碼塊,構造方法的執(zhí)行流程
            靜態(tài)代碼塊 > 構造代碼塊 > 構造方法
        B:靜態(tài)的內容是隨著類的加載而加載
            靜態(tài)代碼塊的內容會優(yōu)先執(zhí)行
        C:子類初始化之前先會進行父類的初始化
        
    結果是:
        靜態(tài)代碼塊Fu
        靜態(tài)代碼塊Zi
        構造代碼塊Fu
        構造方法Fu
        構造代碼塊Zi
        構造方法Zi
*/
class Fu {
    static {
        System.out.println("靜態(tài)代碼塊Fu");
    }

    {
        System.out.println("構造代碼塊Fu");
    }

    public Fu() {
        System.out.println("構造方法Fu");
    }
}

class Zi extends Fu {
    static {
        System.out.println("靜態(tài)代碼塊Zi");
    }

    {
        System.out.println("構造代碼塊Zi");
    }

    public Zi() {
        System.out.println("構造方法Zi");
    }
}

class ExtendsTest2 {
    public static void main(String[] args) {
        Zi z = new Zi();
    }
}

思考

1:代碼塊是什么?代碼塊的分類和各自特點?
2:靜態(tài)代碼塊,構造代碼塊,構造方法的執(zhí)行流程?
3:繼承概述
4:繼承的好處
5:Java中繼承的特點
6:Java中繼承的注意事項?以及我們什么時候使用繼承?
7:繼承中的成員訪問特點
    A:成員變量
        在子類方法中訪問一個變量
    B:成員方法
        在測試類中通過子類對象去訪問一個方法
8:繼承中構造方法的執(zhí)行流程?假如父類沒有無參構造方法,子類應該怎么辦?
9:面試題:
    方法重寫和方法重載的區(qū)別?方法重載能改變返回值類型嗎?
    Overload
    Override

    this關鍵字和super關鍵字分別代表什么?以及他們各自的使用場景和作用捌年。
10:繼承案例練習
11:猜數(shù)字小游戲練習瓢娜。
    通過API學習并使用Math類的random()方法。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末礼预,一起剝皮案震驚了整個濱河市眠砾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌托酸,老刑警劉巖褒颈,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異励堡,居然都是意外死亡谷丸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門应结,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刨疼,“玉大人,你說我怎么就攤上這事鹅龄”液荩” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵砾层,是天一觀的道長漩绵。 經常有香客問我,道長肛炮,這世上最難降的妖魔是什么止吐? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任宝踪,我火速辦了婚禮,結果婚禮上碍扔,老公的妹妹穿的比我還像新娘瘩燥。我一直安慰自己,他們只是感情好不同,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布厉膀。 她就那樣靜靜地躺著,像睡著了一般二拐。 火紅的嫁衣襯著肌膚如雪服鹅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天百新,我揣著相機與錄音企软,去河邊找鬼。 笑死饭望,一個胖子當著我的面吹牛仗哨,可吹牛的內容都是我干的。 我是一名探鬼主播铅辞,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼厌漂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了斟珊?” 一聲冷哼從身側響起桩卵,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倍宾,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胜嗓,經...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡高职,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辞州。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怔锌。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖变过,靈堂內的尸體忽然破棺而出埃元,到底是詐尸還是另有隱情,我是刑警寧澤媚狰,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布岛杀,位于F島的核電站,受9級特大地震影響崭孤,放射性物質發(fā)生泄漏类嗤。R本人自食惡果不足惜糊肠,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望遗锣。 院中可真熱鬧货裹,春花似錦、人聲如沸精偿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笔咽。三九已至搔预,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拓轻,已是汗流浹背斯撮。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扶叉,地道東北人勿锅。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像枣氧,于是被迫代替她去往敵國和親溢十。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內容