twelve 1、構(gòu)造方法 2宇植、this關(guān)鍵字 3得封、super關(guān)鍵字 4、綜合案例

今日內(nèi)容介紹
1指郁、構(gòu)造方法
2忙上、this關(guān)鍵字
3、super關(guān)鍵字
4闲坎、綜合案例

第一節(jié)課

01(面向?qū)ο?構(gòu)造方法引入.avi 03:33

02(面向?qū)ο?構(gòu)造方法作用.avi 05:56

03(面向?qū)ο?構(gòu)造方法的定義和運(yùn)行特點(diǎn).avi 09:21

04(面向?qū)ο?默認(rèn)添加的構(gòu)造方法.avi 04:32

05(面向?qū)ο?構(gòu)造方法的調(diào)用賦值.avi 05:22

06(面向?qū)ο?構(gòu)造方法的內(nèi)存.avi 09:44

第二節(jié)課

07(面向?qū)ο?構(gòu)造方法的重載.avi 08:41

08(面向?qū)ο?構(gòu)造方法和一般方法區(qū)別.avi 02:31

09(面向?qū)ο?this在構(gòu)造方法之間的調(diào)用.avi 15:12

10(面向?qū)ο?this在構(gòu)造方法調(diào)用的內(nèi)存圖.avi 08:45

11(面向?qū)ο?this簡(jiǎn)易應(yīng)用.avi 02:12

第三節(jié)課

12(面向?qū)ο?super關(guān)鍵字_1.avi 03:02

13(面向?qū)ο?super關(guān)鍵字_2.avi 08:59

14(面向?qū)ο?子類(lèi)父類(lèi)的內(nèi)存圖.avi 16:04

15(面向?qū)ο?super關(guān)鍵字_3.avi 11:38

第四節(jié)課

16(面向?qū)ο?super關(guān)鍵字_4.avi 08:17

17(面向?qū)ο?創(chuàng)建子類(lèi)對(duì)象過(guò)程的細(xì)節(jié).avi 03:27

18(面向?qū)ο?super的應(yīng)用.avi 13:02

19(面向?qū)ο?完整員工案例分析.avi 05:50

20(面向?qū)ο?完整員工案例代碼實(shí)現(xiàn).avi 10:46

============上面的內(nèi)容,方便我們只做ppt,word教案以及書(shū)寫(xiě)下面的簡(jiǎn)要的筆記=================

=======================第一節(jié)課開(kāi)始=============================================

01構(gòu)造方法引入

* A:構(gòu)造方法的引入
        在開(kāi)發(fā)中經(jīng)常需要在創(chuàng)建對(duì)象的同時(shí)明確對(duì)象的屬性值疫粥,比如員工入職公司就要明確他的姓名、年齡等屬性信息腰懂。
        那么梗逮,創(chuàng)建對(duì)象就要明確屬性值,那怎么解決呢绣溜?也就是在創(chuàng)建對(duì)象的時(shí)候就要做的事情慷彤,當(dāng)使用new關(guān)鍵字創(chuàng)建對(duì)象時(shí),怎么給對(duì)象的屬性初始化值呢怖喻?
        這就要學(xué)習(xí)Java另外一門(mén)小技術(shù)底哗,構(gòu)造方法。
* B: 那什么是構(gòu)造方法呢锚沸?
        從字面上理解即為構(gòu)建創(chuàng)造時(shí)用的方法艘虎,即就是對(duì)象創(chuàng)建時(shí)要執(zhí)行的方法。既然是對(duì)象創(chuàng)建時(shí)要執(zhí)行的方法咒吐,那么只要在new對(duì)象時(shí)野建,
        知道其執(zhí)行的構(gòu)造方法是什么,就可以在執(zhí)行這個(gè)方法的時(shí)候給對(duì)象進(jìn)行屬性賦值恬叹。

02構(gòu)造方法作用

* A: 構(gòu)造方法的作用:
        在new的同時(shí)給成員變量賦值,給對(duì)象屬性進(jìn)行初始化候生。
* B: 舉例:
        Perons p = new Person("張三",23); 在new 的時(shí)候給p對(duì)象的name屬性和age屬性進(jìn)行賦值,使這個(gè)對(duì)象的屬性有值。

?

03構(gòu)造方法的定義和運(yùn)行特點(diǎn)

* A: 構(gòu)造方法定義
        構(gòu)造方法的格式:
        修飾符 構(gòu)造方法名(參數(shù)列表)
        {
        }

* B: 構(gòu)造方法的體現(xiàn):
        構(gòu)造方法沒(méi)有返回值類(lèi)型绽昼。也不需要寫(xiě)返回值唯鸭。因?yàn)樗菫闃?gòu)建對(duì)象的,對(duì)象創(chuàng)建完硅确,方法就執(zhí)行結(jié)束目溉。
        構(gòu)造方法名稱(chēng)必須和類(lèi)型保持一致明肮。
        構(gòu)造方法沒(méi)有具體的返回值。
        構(gòu)造方法的代碼體現(xiàn):

* C: 構(gòu)造方法舉例
        class Person {
            // Person的成員屬性age和name
            private int age;
            private String name;
        
            // Person的構(gòu)造方法缭付,擁有參數(shù)列表
            Person(int a, String nm) {
                // 接受到創(chuàng)建對(duì)象時(shí)傳遞進(jìn)來(lái)的值柿估,將值賦給成員屬性
                age = a;
                name = nm;
            }
        }

* D: 構(gòu)造方法運(yùn)行特點(diǎn):
        在new 對(duì)象的時(shí)候自動(dòng)調(diào)用執(zhí)行。

04默認(rèn)添加的構(gòu)造方法

* A: 每一class類(lèi)都必須有一個(gè)構(gòu)造方法陷猫,構(gòu)造方法不寫(xiě)也有秫舌。
     編譯的時(shí)候,javac绣檬,系統(tǒng)會(huì)自動(dòng)檢查類(lèi)中是否有構(gòu)造方法足陨,如果沒(méi)有編譯器就會(huì)自動(dòng)添加一個(gè)構(gòu)造方法
     比如Person類(lèi), 編譯器添加一個(gè)無(wú)參構(gòu)造 public Person(){}

05構(gòu)造方法的調(diào)用賦值

* A: 理解構(gòu)造方法的格式和基本功能之后娇未,現(xiàn)在就要研究構(gòu)造方法是怎么執(zhí)行的呢墨缘?在創(chuàng)建對(duì)象的時(shí)候是如何初始化的呢?
     構(gòu)造方法是專(zhuān)門(mén)用來(lái)創(chuàng)建對(duì)象的零抬,也就是在new對(duì)象時(shí)要調(diào)用構(gòu)造方法∧魉希現(xiàn)在來(lái)看看如何調(diào)用構(gòu)造方法。


* B: 案例
        class Person {
            // Person的成員屬性age和name
            private int age;
            private String name;
        
            // Person的構(gòu)造方法媚值,擁有參數(shù)列表
            Person(int a, String nm) {
                // 接受到創(chuàng)建對(duì)象時(shí)傳遞進(jìn)來(lái)的值狠毯,將值賦給成員屬性
                age = a;
                name = nm;
            }
        
            public void speak() {
                System.out.println("name=" + name + ",age=" + age);
            }
        }
        
        class PersonDemo {
            public static void main(String[] args) {
                // 創(chuàng)建Person對(duì)象,并明確對(duì)象的年齡和姓名
                Person p2 = new Person(23, "張三");
                p2.speak();
            }
        }

    上述代碼演示了創(chuàng)建對(duì)象時(shí)構(gòu)造方法的調(diào)用褥芒。即在創(chuàng)建對(duì)象時(shí)嚼松,會(huì)調(diào)用與參數(shù)列表對(duì)應(yīng)的構(gòu)造方法

06構(gòu)造方法的內(nèi)存

    A:內(nèi)存加載的過(guò)程
        有一個(gè)Person類(lèi), 創(chuàng)建Person 對(duì)象new Person()
        1、首先會(huì)將main方法壓入棧中锰扶,執(zhí)行main方法中的 new Person(23,"張三"); 
        2献酗、在堆內(nèi)存中分配一片區(qū)域,用來(lái)存放創(chuàng)建的Person對(duì)象坷牛,這片內(nèi)存區(qū)域會(huì)有屬于自己的內(nèi)存地址(0x88)罕偎。然后給成員變量進(jìn)行默認(rèn)初始化(name=null,age=0)京闰。
        3颜及、執(zhí)行構(gòu)造方法中的代碼(age = a ; name = nm;),將變量a對(duì)應(yīng)的23賦值給age,將變量nm對(duì)應(yīng)的”張三賦值給name蹂楣,這段代碼執(zhí)行結(jié)束后俏站,成員變量age和name的值已經(jīng)改變。執(zhí)行結(jié)束之后構(gòu)造方法彈棧痊土,Person對(duì)象創(chuàng)建完成肄扎。將Person對(duì)象的內(nèi)存地址0x88賦值給p2。

==============================第二節(jié)課開(kāi)始====================================

07構(gòu)造方法的重載

* A:當(dāng)在描述事物時(shí),要不要在類(lèi)中寫(xiě)構(gòu)造方法呢犯祠?這時(shí)要根據(jù)描述事物的特點(diǎn)來(lái)確定旭等,當(dāng)描述的事物在創(chuàng)建其對(duì)象時(shí)就要明確屬性的值,這時(shí)就需要在定義類(lèi)的時(shí)候書(shū)寫(xiě)帶參數(shù)的構(gòu)造方法衡载。
*    若創(chuàng)建對(duì)象時(shí)不需要明確具體的數(shù)據(jù)搔耕,這時(shí)可以不用書(shū)寫(xiě)構(gòu)造方法(不書(shū)寫(xiě)也有默認(rèn)的構(gòu)造方法)。
        構(gòu)造方法的細(xì)節(jié):
        1月劈、一個(gè)類(lèi)中可以有多個(gè)構(gòu)造方法度迂,多個(gè)構(gòu)造方法是以重載的形式存在的
        2藤乙、構(gòu)造方法是可以被private修飾的猜揪,作用:其他程序無(wú)法創(chuàng)建該類(lèi)的對(duì)象。
* B: 舉例
    class Person {
        private int age;
        private String name;
    
        // 私有無(wú)參數(shù)的構(gòu)造方法坛梁,即外界不能通過(guò)new Person();語(yǔ)句創(chuàng)建本類(lèi)對(duì)象
        private Person() {
        }
    
        // 多個(gè)構(gòu)造方法是以重載的形式存在
        Person(int a) {
            age = a;
        }
    
        Person(String nm, int a) {
            name = nm;
            age = a;
        }
    }

?

08構(gòu)造方法和一般方法區(qū)別

* A: 目前為止而姐,學(xué)習(xí)兩種方法,分別為構(gòu)造方法和一般方法划咐,那么他們之間有什么異同呢拴念?
    1.格式不同
     構(gòu)造方法 : 修飾符  類(lèi)名(參數(shù)類(lèi)型 參數(shù) ...){
        初始化成員變量
    }
    一般方法: 需要有返回值類(lèi)型
    2.作用不同
    構(gòu)造方法一般用來(lái)給成員變量初始化;
    一般方法根據(jù)需求而定;
    3.調(diào)用方式不同
    構(gòu)造方法創(chuàng)建對(duì)象時(shí)調(diào)用, 或者this() super() 語(yǔ)句調(diào)用
    普通方法需要對(duì)象調(diào)用或者靜態(tài)方法直接調(diào)用靜態(tài)方法.
    4.執(zhí)行不同
    構(gòu)造方法在對(duì)象創(chuàng)建時(shí)就執(zhí)行了,而且只執(zhí)行一次褐缠。
    一般方法是在對(duì)象創(chuàng)建后政鼠,需要使用時(shí)才被對(duì)象調(diào)用,并可以被多次調(diào)用队魏。

?

09this在構(gòu)造方法之間的調(diào)用

* A: 在之前學(xué)習(xí)方法之間調(diào)用時(shí)公般,可以通過(guò)方法名進(jìn)行調(diào)用『埃可是針對(duì)構(gòu)造方法官帘,無(wú)法通過(guò)構(gòu)造方法名來(lái)相互調(diào)用。
    構(gòu)造方法之間的調(diào)用昧谊,可以通過(guò)this關(guān)鍵字來(lái)完成刽虹。
    構(gòu)造方法調(diào)用格式:
    this(參數(shù)列表);

* B:調(diào)用構(gòu)造方法的案例
    class Person {
        // Person的成員屬性
        private int age;
        private String name;
    
        // 無(wú)參數(shù)的構(gòu)造方法
        Person() {
        }
    
        // 給姓名初始化的構(gòu)造方法
        Person(String nm) {
            name = nm;
        }
    
        // 給姓名和年齡初始化的構(gòu)造方法
        Person(String nm, int a) {
            // 由于已經(jīng)存在給姓名進(jìn)行初始化的構(gòu)造方法 name = nm;因此只需要調(diào)用即可
            // 調(diào)用其他構(gòu)造方法,需要通過(guò)this關(guān)鍵字來(lái)調(diào)用
            this(nm);
            // 給年齡初始化
            age = a;
        }
    }

10this在構(gòu)造方法調(diào)用的內(nèi)存圖

* A: 被加載的代碼
    class Person {
        private int age;
        private String name;

        Person() {
        }
        Person(String nm) {
            name = nm;
        }
        Person(String nm, int a) {
            this(nm);
            age = a;
        }
    }

    class PersonDemo {
        public static void main(String[] args) {
            Person p = new Person("張三", 23);
        }
    }


* B: 構(gòu)造方法調(diào)用的原理圖
*   圖略
    1呢诬、先執(zhí)行main方法涌哲,main方法壓棧,執(zhí)行其中的new Person(“張三”,23);
    2尚镰、堆內(nèi)存中開(kāi)辟空間阀圾,并為其分配內(nèi)存地址0x33,钓猬,緊接著成員變量默認(rèn)初始化(name=null  age = 0)稍刀;
    3、擁有兩個(gè)參數(shù)的構(gòu)造方法(Person(String nm , int a))壓棧,在這個(gè)構(gòu)造方法中有一個(gè)隱式的this账月,因?yàn)闃?gòu)造方法是給對(duì)象初始化的综膀,那個(gè)對(duì)象調(diào)用到這個(gè)構(gòu)造方法,this就指向堆中的那個(gè)對(duì)象局齿。
    4剧劝、由于Person(String nm , int a)構(gòu)造方法中使用了this(nm);構(gòu)造方法Person(String nm)就會(huì)壓棧,并將“張三”傳遞給nm抓歼。在Person(String nm , int a)構(gòu)造方法中同樣也有隱式的this讥此,this的值同樣也為0x33,這時(shí)會(huì)執(zhí)行其中name = nm谣妻,即把“張三”賦值給成員的name萄喳。當(dāng)賦值結(jié)束后Person(String nm , int a)構(gòu)造方法彈棧。
    5蹋半、程序繼續(xù)執(zhí)行構(gòu)造方法(Person(String nm , int a)中的age = a他巨;這時(shí)會(huì)將23賦值給成員屬性age。賦值結(jié)束構(gòu)造方法(Person(String nm , int a)彈棧减江。
    6染突、當(dāng)構(gòu)造方法(Person(String nm , int a)彈棧結(jié)束后,Person對(duì)象在內(nèi)存中創(chuàng)建完成辈灼,并將0x33賦值給main方法中的p引用變量份企。
    注意:
    this到底代表什么呢?this代表的是對(duì)象巡莹,具體代表哪個(gè)對(duì)象呢司志?哪個(gè)對(duì)象調(diào)用了this所在的方法,this就代表哪個(gè)對(duì)象榕莺。
    調(diào)用其他構(gòu)造方法的語(yǔ)句必須定義在構(gòu)造方法的第一行俐芯,原因是初始化動(dòng)作要最先執(zhí)行。

11this簡(jiǎn)易應(yīng)用

* A: 當(dāng)在方法中出現(xiàn)了局部變量和成員變量同名的時(shí)候钉鸯,那么在方法中怎么區(qū)別局部變量成員變量呢吧史?可以在成員變量名前面加上this.來(lái)區(qū)別成員變量和局部變量
* B: 舉例1
    class Person {
        private int age;
        private String name;
    
        // 給姓名和年齡初始化的構(gòu)造方法
        Person(String name, int age) {
            // 當(dāng)需要訪問(wèn)成員變量是,只需要在成員變量前面加上this.即可
            this.name = name;
            this.age = age;
        }
    
        public void speak() {
            System.out.println("name=" + this.name + ",age=" + this.age);
        }
    }
    
    class PersonDemo {
        public static void main(String[] args) {
            Person p = new Person("張三", 23);
            p.speak();
        }
    }

* C: 舉例2
    學(xué)習(xí)完了構(gòu)造方法唠雕、this的用法之后贸营,現(xiàn)在做個(gè)小小的練習(xí)。
    需求:在Person類(lèi)中定義功能岩睁,判斷兩個(gè)人是否是同齡人
    class Person {
        private int age;
        private String name;
    
        // 給姓名和年齡初始化的構(gòu)造方法
        Person(String name, int age) {
            // 當(dāng)需要訪問(wèn)成員變量是钞脂,只需要在成員變量前面加上this.即可
            this.name = name;
            this.age = age;
        }
    
        public void speak() {
            System.out.println("name=" + this.name + ",age=" + this.age);
        }
    
        // 判斷是否為同齡人
        public boolean equalsAge(Person p) {
            // 使用當(dāng)前調(diào)用該equalsAge方法對(duì)象的age和傳遞進(jìn)來(lái)p的age進(jìn)行比較
            // 由于無(wú)法確定具體是哪一個(gè)對(duì)象調(diào)用equalsAge方法,這里就可以使用this來(lái)代替
            /*
             * if(this.age == p.age) { return true; } return false;
             */
            return this.age = p.age;
        }
    }

==============================第三節(jié)課開(kāi)始====================================

?

12super關(guān)鍵字_1

* A: 子父類(lèi)中構(gòu)造方法的調(diào)用
    在創(chuàng)建子類(lèi)對(duì)象時(shí)捕儒,父類(lèi)的構(gòu)造方法會(huì)先執(zhí)行冰啃,因?yàn)樽宇?lèi)中所有構(gòu)造方法的第一行有默認(rèn)的隱式super();語(yǔ)句邓夕。
* B: 格式:
    調(diào)用本類(lèi)中的構(gòu)造方法
    this(實(shí)參列表);
    調(diào)用父類(lèi)中的空參數(shù)構(gòu)造方法
    super();
    調(diào)用父類(lèi)中的有參數(shù)構(gòu)造方法
    super(實(shí)參列表);

13super關(guān)鍵字_2

* A:子類(lèi)構(gòu)造方法,有一個(gè)默認(rèn)添加的構(gòu)造方法
    public class Student extends Person {
         public Student(){
            super();
         }
    }
* B :為什么子類(lèi)對(duì)象創(chuàng)建都要訪問(wèn)父類(lèi)中的構(gòu)造方法?因?yàn)樽宇?lèi)繼承了父類(lèi)的內(nèi)容阎毅,所以創(chuàng)建對(duì)象時(shí)焚刚,必須要先看父類(lèi)是如何對(duì)其內(nèi)容進(jìn)行初始化的,看如下程序
    public class Test {
        public static void main(String[] args) {
            new Zi();
        }
        
    }
    class Fu{
        int num ;
        Fu(){
            System.out.println("Fu構(gòu)造方法"+num);
            num = 4;
        }
    }
    class Zi extends Fu{
        Zi(){
             //super(); 調(diào)用父類(lèi)空參數(shù)構(gòu)造方法
            System.out.println("Zi構(gòu)造方法"+num);
        }
    }

    執(zhí)行結(jié)果:

Fu構(gòu)造方法0
   Zi構(gòu)造方法4

    通過(guò)結(jié)果發(fā)現(xiàn)扇调,子類(lèi)構(gòu)造方法執(zhí)行時(shí)中矿咕,調(diào)用了父類(lèi)構(gòu)造方法,這說(shuō)明狼钮,子類(lèi)構(gòu)造方法中有一句super()碳柱。
    那么,子類(lèi)中的構(gòu)造方法為什么會(huì)有一句隱式的super()呢熬芜?
    原因:子類(lèi)會(huì)繼承父類(lèi)中的內(nèi)容莲镣,所以子類(lèi)在初始化時(shí),必須先到父類(lèi)中去執(zhí)行父類(lèi)的初始化動(dòng)作猛蔽。這樣剥悟,才可以使用父類(lèi)中的內(nèi)容灵寺。
    當(dāng)父類(lèi)中沒(méi)有空參數(shù)構(gòu)造方法時(shí)曼库,子類(lèi)的構(gòu)造方法必須有顯示的super語(yǔ)句,指定要訪問(wèn)的父類(lèi)有參數(shù)構(gòu)造方法略板。

14子類(lèi)父類(lèi)的內(nèi)存圖

    略: 
    具體見(jiàn) day12_source/子類(lèi)父類(lèi)的內(nèi)存圖.JPG   

15super關(guān)鍵字_3

* A: 創(chuàng)建子類(lèi)對(duì)象的時(shí)候會(huì)必須調(diào)用父類(lèi)的構(gòu)造方法毁枯。
   子類(lèi)默認(rèn)會(huì)調(diào)用父類(lèi)的無(wú)參構(gòu)造, 但如果父類(lèi)沒(méi)有無(wú)參構(gòu)造叮称,子類(lèi)的構(gòu)造方法繼續(xù)調(diào)用父類(lèi)的無(wú)參構(gòu)造就會(huì)報(bào)錯(cuò)种玛。
   因此子類(lèi)構(gòu)造方法的第一行需要調(diào)用父類(lèi)的構(gòu)造方法,既可以調(diào)用父類(lèi)的無(wú)參構(gòu)造瓤檐,也可以調(diào)用父類(lèi)的有參構(gòu)造赂韵,這樣語(yǔ)法上就不會(huì)報(bào)錯(cuò)。

16super關(guān)鍵字_4

* A: 構(gòu)造方法第一行,寫(xiě)this()還是super()
*  this() 是調(diào)用本類(lèi)的構(gòu)造方法,super()是調(diào)用父類(lèi)的構(gòu)造方法, 且兩條語(yǔ)句不能同時(shí)存在
*  保證子類(lèi)的所有構(gòu)造方法調(diào)用到父類(lèi)的構(gòu)造方法即可

* B: 小結(jié):
* 無(wú)論如何,子類(lèi)的所有構(gòu)造方法,直接或間接必須調(diào)用到父類(lèi)構(gòu)造方法;
* 子類(lèi)的構(gòu)造方法什么都不寫(xiě),默認(rèn)的構(gòu)造方法第一行super()

17創(chuàng)建子類(lèi)對(duì)象過(guò)程的細(xì)節(jié)

* A 創(chuàng)建子類(lèi)對(duì)象過(guò)程的細(xì)節(jié)
* 如果子類(lèi)的構(gòu)造方法第一行寫(xiě)了this調(diào)用了本類(lèi)其他構(gòu)造方法挠蛉,那么super調(diào)用父類(lèi)的語(yǔ)句還有嗎祭示?
* 這時(shí)是沒(méi)有的,因?yàn)閠his()或者super(),只能定義在構(gòu)造方法的第一行谴古,因?yàn)槌跏蓟瘎?dòng)作要先執(zhí)行质涛。
* 父類(lèi)構(gòu)造方法中是否有隱式的super呢?
* 也是有的掰担。記谆懵健:只要是構(gòu)造方法默認(rèn)第一行都是super();
* 父類(lèi)的父類(lèi)是誰(shuí)呢?super調(diào)用的到底是誰(shuí)的構(gòu)造方法呢带饱?
* Java體系在設(shè)計(jì)毡代,定義了一個(gè)所有對(duì)象的父類(lèi)Object

* 注意:
    類(lèi)中的構(gòu)造方法默認(rèn)第一行都有隱式的super()語(yǔ)句,在訪問(wèn)父類(lèi)中的空參數(shù)構(gòu)造方法。所以父類(lèi)的構(gòu)造方法既可以給自己的對(duì)象初始化教寂,也可以給自己的子類(lèi)對(duì)象初始化灯蝴。
    如果默認(rèn)的隱式super()語(yǔ)句在父類(lèi)中沒(méi)有對(duì)應(yīng)的構(gòu)造方法,那么必須在構(gòu)造方法中通過(guò)this或者super的形式明確要調(diào)用的構(gòu)造方法孝宗。

==============================第四節(jié)課開(kāi)始====================================

18super的應(yīng)用

 * A: 練習(xí):描述學(xué)生和工人這兩個(gè)類(lèi)穷躁,將他們的共性name和age抽取出來(lái)存放在父類(lèi)中,并提供相應(yīng)的get和set方法因妇,同時(shí)需要在創(chuàng)建學(xué)生和工人對(duì)象就必須明確姓名和年齡
 * 案例:
    //定義Person類(lèi)问潭,將Student和Worker共性抽取出來(lái)
    class Person {
        private String name;
        private int age;
        public Person(String name, int age) {
            // super();
            this.name = name;
            this.age = age;
        }
        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;
        }
    }
    class Student extends Person {
        // Student類(lèi)的構(gòu)造方法
        Student(String name, int age) {
            // 使用super關(guān)鍵字調(diào)用父類(lèi)構(gòu)造方法,進(jìn)行相應(yīng)的初始化動(dòng)作
            super(name, age);
        }
        public void study() {// Studnet中特有的方法
            System.out.println(this.getName() + "同學(xué)在學(xué)習(xí)");
        }
    }
    class Worker extends Person {
        Worker(String name, int age) {
            // 使用super關(guān)鍵字調(diào)用父類(lèi)構(gòu)造方法婚被,進(jìn)行相應(yīng)的初始化動(dòng)作
            super(name, age);
        }
        public void work() {// Worker 中特有的方法
            System.out.println(this.getName() + "工人在工作");
        }
    }
    public class Test {
        public static void main(String[] args) {
            Student stu = new Student("小明",23);
    stu.study();
            
    Worker w = new Worker("小李",45);
    w.work();
        }
    }

19完整員工案例分析

 * A: 項(xiàng)目介紹
    某IT公司有多名員工狡忙,按照員工負(fù)責(zé)的工作不同,進(jìn)行了部門(mén)的劃分(研發(fā)部員工址芯、維護(hù)部員工)灾茁。研發(fā)部根據(jù)所需研發(fā)的內(nèi)容不同,又分為JavaEE工程師谷炸、Android工程師北专;維護(hù)部根據(jù)所需維護(hù)的內(nèi)容不同,又分為網(wǎng)絡(luò)維護(hù)工程師旬陡、硬件維護(hù)工程師拓颓。
    公司的每名員工都有他們自己的員工編號(hào)、姓名描孟,并要做它們所負(fù)責(zé)的工作驶睦。
    工作內(nèi)容
    JavaEE工程師:?jiǎn)T工號(hào)為xxx的 xxx員工,正在研發(fā)淘寶網(wǎng)站
    Android工程師:?jiǎn)T工號(hào)為xxx的 xxx員工匿醒,正在研發(fā)淘寶手機(jī)客戶端軟件
    網(wǎng)絡(luò)維護(hù)工程師:?jiǎn)T工號(hào)為xxx的 xxx員工场航,正在檢查網(wǎng)絡(luò)是否暢通
    硬件維護(hù)工程師:?jiǎn)T工號(hào)為xxx的 xxx員工,正在修復(fù)打印機(jī)
    請(qǐng)根據(jù)描述廉羔,完成員工體系中所有類(lèi)的定義溉痢,并指定類(lèi)之間的繼承關(guān)系。進(jìn)行XX工程師類(lèi)的對(duì)象創(chuàng)建蜜另,完成工作方法的調(diào)用适室。

* B: 案例分析
    根據(jù)上述部門(mén)的描述,得出如下的員工體系圖
 
    根據(jù)員工信息的描述举瑰,確定每個(gè)員工都有員工編號(hào)捣辆、姓名、要進(jìn)行工作此迅。則汽畴,把這些共同的屬性與功能抽取到父類(lèi)中(員工類(lèi))旧巾,關(guān)于工作的內(nèi)容由具體的工程師來(lái)進(jìn)行指定。
    工作內(nèi)容
    JavaEE工程師:?jiǎn)T工號(hào)為xxx的 xxx員工忍些,正在研發(fā)淘寶網(wǎng)站
    Android工程師:?jiǎn)T工號(hào)為xxx的 xxx員工鲁猩,正在研發(fā)淘寶手機(jī)客戶端軟件
    網(wǎng)絡(luò)維護(hù)工程師:?jiǎn)T工號(hào)為xxx的 xxx員工,正在檢查網(wǎng)絡(luò)是否暢通
    硬件維護(hù)工程師:?jiǎn)T工號(hào)為xxx的 xxx員工罢坝,正在修復(fù)打印機(jī)
    創(chuàng)建JavaEE工程師對(duì)象廓握,完成工作方法的調(diào)用

20案例代碼實(shí)現(xiàn)

 * A:定義員工類(lèi)(抽象類(lèi))
    public abstract class Employee {
        private String id;// 員工編號(hào)
        private String name; // 員工姓名
        
        //空參數(shù)構(gòu)造方法
        public Employee() {
            super();
        }
        //有參數(shù)構(gòu)造方法
        public Employee(String id, String name) {
            super();
            this.id = id;
            this.name = name;
        }
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        //工作方法(抽象方法)
        public abstract void work(); 
    }
    
    * B :   定義研發(fā)部員工類(lèi)Developer 繼承 員工類(lèi)Employee
    public abstract class Developer extends Employee {
        //空參數(shù)構(gòu)造方法
        public Developer() {
            super();
        }
        //有參數(shù)構(gòu)造方法
        public Developer(String id, String name) {
            super(id, name);
        }
    }
    
    * C:    定義維護(hù)部員工類(lèi)Maintainer 繼承 員工類(lèi)Employee
    public abstract class Maintainer extends Employee {
        //空參數(shù)構(gòu)造方法
        public Maintainer() {
            super();
        }
        //有參數(shù)構(gòu)造方法
        public Maintainer(String id, String name) {
            super(id, name);
        }
    }
    
    * D:    定義JavaEE工程師 繼承 研發(fā)部員工類(lèi),重寫(xiě)工作方法
    public class JavaEE extends Developer {
        //空參數(shù)構(gòu)造方法
        public JavaEE() {
            super();
        }
        //有參數(shù)構(gòu)造方法
        public JavaEE(String id, String name) {
            super(id, name);
        }
    
        @Override
        public void work() {
            System.out.println("員工號(hào)為 " + getId() + " 的 " + getName() + " 員工嘁酿,正在研發(fā)淘寶網(wǎng)站");
        }
    }
    
    * E:    定義Android工程師 繼承 研發(fā)部員工類(lèi)隙券,重寫(xiě)工作方法
    public class Android extends Developer {
        //空參數(shù)構(gòu)造方法
        public Android() {
            super();
        }
        //有參數(shù)構(gòu)造方法
        public Android(String id, String name) {
            super(id, name);
        }
    
        @Override
        public void work() {
            System.out.println("員工號(hào)為 " + getId() + " 的 " + getName() + " 員工,正在研發(fā)淘寶手機(jī)客戶端軟件");
        }
    }
    
    * F:    定義Network網(wǎng)絡(luò)維護(hù)工程師 繼承 維護(hù)部員工類(lèi)闹司,重寫(xiě)工作方法
    public class Network extends Maintainer {
        //空參數(shù)構(gòu)造方法
        public Network() {
            super();
        }
        //有參數(shù)構(gòu)造方法
        public Network(String id, String name) {
            super(id, name);
        }
    
        @Override
        public void work() {
            System.out.println("員工號(hào)為 " + getId() + " 的 " + getName() + " 員工娱仔,正在檢查網(wǎng)絡(luò)是否暢通");
        }
    }
    
    * G:    定義Hardware硬件維護(hù)工程師 繼承 維護(hù)部員工類(lèi),重寫(xiě)工作方法
    public class Hardware extends Maintainer {
        //空參數(shù)構(gòu)造方法
        public Hardware() {
            super();
        }
        //有參數(shù)構(gòu)造方法
        public Hardware(String id, String name) {
            super(id, name);
        }
    
        @Override
        public void work() {
            System.out.println("員工號(hào)為 " + getId() + " 的 " + getName() + " 員工游桩,正在修復(fù)打印機(jī)");
        }
    }
    
    * H:    在測(cè)試類(lèi)中牲迫,創(chuàng)建JavaEE工程師對(duì)象,完成工作方法的調(diào)用
    public class Test {
        public static void main(String[] args) {
            //創(chuàng)建JavaEE工程師員工對(duì)象借卧,該員工的編號(hào)000015盹憎,員工的姓名 小明
            JavaEE ee = new JavaEE("000015", "小明");
            //調(diào)用該員工的工作方法
            ee.work();
        }
    }

21總結(jié)

* 把今天的知識(shí)點(diǎn)總結(jié)一遍。

1谓娃、構(gòu)造方法的格式是什么脚乡?有哪些注意事項(xiàng)?
權(quán)限修飾符 類(lèi)名(參數(shù)列表){方法體}

2滨达、構(gòu)造方法可以重載嗎? 里邊可以有return語(yǔ)句嗎俯艰?
可以重載 可以有return但不能有返回值

3捡遍、給成員變量賦值有幾種方式?有什么區(qū)別竹握?
get/set
直接賦值
帶參構(gòu)造器賦值
初始化
static 代碼塊賦值
默認(rèn)構(gòu)造器賦值

4.編寫(xiě)一個(gè)完整的Person類(lèi),使用this關(guān)鍵字給成員變量進(jìn)行賦值.
在測(cè)試類(lèi)中測(cè)試
代碼:

public class HomeWork {
public static void main(String[] args) {
Person p = new Person();
p.run();
System.out.println(p.getAge());
System.out.println(p.getName());
}
}

class Person {
private int age;
private String name;

public int getAge() {
    return age;
}

public String getName() {
    return name;
}

public void run() {
    this.age = 10;
    this.name = "邊天旭";
}

}

5画株、根據(jù)需求,完成如下代碼(按照標(biāo)準(zhǔn)格式寫(xiě))啦辐,并在測(cè)試類(lèi)中進(jìn)行測(cè)試谓传。
標(biāo)準(zhǔn)格式包含: 私有屬性 無(wú)參構(gòu)造 有參構(gòu)造 setter 和getter 需求中的方法
需求一:
員工類(lèi)Employee
屬性:姓名name,工號(hào)id,工資salary
行為:顯示所有成員信息的方法show()
代碼:

class Employee {
private String name;
private String id;
private double salary;

public Employee() {
    super();
    // TODO Auto-generated constructor stub
}

public Employee(String name, String id, double salary) {
    super();
    this.name = name;
    this.id = id;
    this.salary = salary;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public double getSalary() {
    return salary;
}

public void setSalary(double salary) {
    this.salary = salary;
}

public void show() {
    System.out.println("姓名:" + this.name);
    System.out.println("工號(hào):" + this.id);
    System.out.println("工資:" + this.salary);
}

}
需求二:
動(dòng)物類(lèi)Animal
屬性:姓名name,年齡age
行為:吃飯eat,睡覺(jué)sleep
代碼:

class Animal {
private String name;
private int age;

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 Animal(String name, int age) {
    super();
    this.name = name;
    this.age = age;
}

public Animal() {
    super();
}

public void eat() {
    System.out.println("動(dòng)物吃飯");
}

public void sleep() {
    System.out.println("動(dòng)物睡覺(jué)");
}

}

需求三:
    人類(lèi)Person
        屬性:姓名name,年齡age,性別gender
        行為:學(xué)習(xí)study,睡覺(jué)sleep

代碼:

class person {
private String name;
private int age;
private char gender;

public person() {
    super();
    // TODO Auto-generated constructor stub
}

public person(String name, int age, char gender) {
    super();
    this.name = name;
    this.age = age;
    this.gender = gender;
}

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 char getGender() {
    return gender;
}

public void setGender(char gender) {
    this.gender = gender;
}

public void study() {
    System.out.println("學(xué)生學(xué)習(xí)");
}

public void sleep() {
    System.out.println("學(xué)生睡覺(jué)");
}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末芹关,一起剝皮案震驚了整個(gè)濱河市续挟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌侥衬,老刑警劉巖诗祸,帶你破解...
    沈念sama閱讀 223,002評(píng)論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跑芳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡直颅,警方通過(guò)查閱死者的電腦和手機(jī)博个,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)功偿,“玉大人盆佣,你說(shuō)我怎么就攤上這事⌒岛桑” “怎么了罪塔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,787評(píng)論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)养葵。 經(jīng)常有香客問(wèn)我征堪,道長(zhǎng),這世上最難降的妖魔是什么关拒? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,237評(píng)論 1 300
  • 正文 為了忘掉前任佃蚜,我火速辦了婚禮,結(jié)果婚禮上着绊,老公的妹妹穿的比我還像新娘谐算。我一直安慰自己,他們只是感情好归露,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布洲脂。 她就那樣靜靜地躺著,像睡著了一般剧包。 火紅的嫁衣襯著肌膚如雪恐锦。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,821評(píng)論 1 314
  • 那天疆液,我揣著相機(jī)與錄音一铅,去河邊找鬼。 笑死堕油,一個(gè)胖子當(dāng)著我的面吹牛潘飘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掉缺,決...
    沈念sama閱讀 41,236評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼卜录,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了眶明?” 一聲冷哼從身側(cè)響起艰毒,我...
    開(kāi)封第一講書(shū)人閱讀 40,196評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赘来,沒(méi)想到半個(gè)月后现喳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體凯傲,經(jīng)...
    沈念sama閱讀 46,716評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評(píng)論 3 343
  • 正文 我和宋清朗相戀三年嗦篱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冰单。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,928評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡灸促,死狀恐怖诫欠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浴栽,我是刑警寧澤荒叼,帶...
    沈念sama閱讀 36,583評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站典鸡,受9級(jí)特大地震影響被廓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜萝玷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評(píng)論 3 336
  • 文/蒙蒙 一嫁乘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧球碉,春花似錦蜓斧、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,755評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至豆拨,卻和暖如春直奋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辽装。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,869評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工帮碰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拾积。 一個(gè)月前我還...
    沈念sama閱讀 49,378評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像丰涉,于是被迫代替她去往敵國(guó)和親拓巧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評(píng)論 2 361

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