成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

1、繼承 2、抽象類(lèi) 3、綜合案例---員工類(lèi)系列定義

wuaiqiu / 731人閱讀

摘要:繼承的出現(xiàn)讓類(lèi)與類(lèi)之間產(chǎn)生了關(guān)系,提供了多態(tài)的前提。繼承的注意事項(xiàng)繼承的注意事項(xiàng)在中,類(lèi)只支持單繼承,不允許多繼承,也就是說(shuō)一個(gè)類(lèi)只能有一個(gè)直接父類(lèi),例如下面這種情況是不合法的。

01繼承的概述
 *A:繼承的概念
    *a:繼承描述的是事物之間的所屬關(guān)系,通過(guò)繼承可以使多種事物之間形成一種關(guān)系體系
    *b:在Java中,類(lèi)的繼承是指在一個(gè)現(xiàn)有類(lèi)的基礎(chǔ)上去構(gòu)建一個(gè)新的類(lèi),
        構(gòu)建出來(lái)的新類(lèi)被稱(chēng)作子類(lèi),現(xiàn)有類(lèi)被稱(chēng)作父類(lèi)
  *B:繼承關(guān)系的子類(lèi)特點(diǎn)  
    *a:子類(lèi)會(huì)自動(dòng)擁有父類(lèi)所有非private修飾的屬性和方法
02繼承的定義格式和使用
 *A:繼承的格式
    class 子類(lèi) extends 父類(lèi) {}
 *B:雇員(Employee)與研發(fā)部員工(Developer)案例:
    *cn.itcast.demo01包下:
    *Employee.java:
         /*
         * 定義員工類(lèi)Employee
         */
        class Employee {
            String name; // 定義name屬性
            
            public void work() {// 定義員工的工作方法
                System.out.println("盡心盡力地工作");
            }
        }
    *Developer.java:
        /*
         * 定義研發(fā)部員工類(lèi)Developer 繼承 員工類(lèi)Employee
         * 繼承了父類(lèi)中所有非private修飾的成員變量
         */
        class Developer extends Employee {
            // 定義一個(gè)打印name的方法
            public void printName() {
                System.out.println("name=" + name);
            }
        }
    *測(cè)試員工類(lèi)與研發(fā)部員工類(lèi):
        /*
          * 定義測(cè)試類(lèi)
         */
        public class Example01 {
            public static void main(String[] args) {
                Developer d = new Developer(); // 創(chuàng)建一個(gè)研發(fā)部員工類(lèi)對(duì)象
                d.name = "小明"; // 為該員工類(lèi)的name屬性進(jìn)行賦值
                d.printName(); // 調(diào)用該員工的printName()方法
                d.work(); // 調(diào)用Developer類(lèi)繼承來(lái)的work()方法
            }
        }
    *通過(guò)子類(lèi)對(duì)象既可以調(diào)用自身的非private修飾的成員,也可以調(diào)用父類(lèi)的非private修飾的成員
03繼承的好處
*A:繼承的好處:
    *1、繼承的出現(xiàn)提高了代碼的復(fù)用性,提高軟件開(kāi)發(fā)效率。
    *2、繼承的出現(xiàn)讓類(lèi)與類(lèi)之間產(chǎn)生了關(guān)系,提供了多態(tài)的前提。
04繼承的注意事項(xiàng)
 *A:繼承的注意事項(xiàng) 
     *a:在Java中,類(lèi)只支持單繼承,不允許多繼承,也就是說(shuō)一個(gè)類(lèi)只能有一個(gè)直接父類(lèi),例如下面這種情況是不合法的。
         class A{} 
         class B{}
         class C extends A,B{}  // C類(lèi)不可以同時(shí)繼承A類(lèi)和B類(lèi)
      假如支持多繼承例如:
         class A{
             int a=3;
            public void method(){

            }
         } 
         class B{
             int a=5;
             public void method(){

             }
         }
         class C extends A,B{
            
         } 
         class Demo{
             public static void main(String[] args){
                 C c=new C();
                 System.out.println(c.a);//到底是調(diào)用A的還是B的成員變量??無(wú)法確定
                 c.method();//到底是調(diào)用A的還是B的成員方法??無(wú)法確定
             }    
         }
?   
      *b:多個(gè)類(lèi)可以繼承一個(gè)父類(lèi),例如下面這種情況是允許的(就像你爹可以多個(gè)兒子,但是這些兒子都只有一個(gè)爹)
         class A{}
         class B extends A{}
         class C extends A{}   // 類(lèi)B和類(lèi)C都可以繼承類(lèi)A
?     
     *c:在Java中,多層繼承是可以的,
        即一個(gè)類(lèi)的父類(lèi)可以再去繼承另外的父類(lèi),
        例如C類(lèi)繼承自B類(lèi),而B(niǎo)類(lèi)又可以去繼承A類(lèi),這時(shí),C類(lèi)也可稱(chēng)作A類(lèi)的子類(lèi)。下面這種情況是允許的。
         class A{}
         class B extends A{}   // 類(lèi)B繼承類(lèi)A,類(lèi)B是類(lèi)A的子類(lèi)
         class C extends B{}   // 類(lèi)C繼承類(lèi)B,類(lèi)C是類(lèi)B的子類(lèi),同時(shí)也是類(lèi)A的子類(lèi)

?

      *d:在Java中,子類(lèi)和父類(lèi)是一種相對(duì)概念,
        也就是說(shuō)一個(gè)類(lèi)是某個(gè)類(lèi)父類(lèi)的同時(shí),也可以是另一個(gè)類(lèi)的子類(lèi)。
        例如上面的這種情況中,B類(lèi)是A類(lèi)的子類(lèi),同時(shí)又是C類(lèi)的父類(lèi)。
05繼承的體系.avi 11:00

*A:繼承的體系:

                                      動(dòng)物(吃)
                                        |
                               -------------------------
                               |                        |
                            貓科動(dòng)物(吃,胎生)      爬行動(dòng)物(吃,卵生)
                               |                            |
             -------------------------------        -----------------      
             |                             |        |                |
            貓(吃,抓老鼠,胎生)   虎(吃,領(lǐng)地,胎生)  蛇(吃,冬眠,卵生)  鱷魚(yú)(吃,潛水,卵生)
    
    
    *a:動(dòng)物體系是對(duì)每個(gè)具體事物共性的抽取,子類(lèi)的共性抽取形成父類(lèi)
    *b:父類(lèi):具有所有子類(lèi)的共性?xún)?nèi)容
       子類(lèi):不但有共性還有自身特有的內(nèi)容
    *c:整個(gè)繼承體系,越向上越抽象,越向下越具體
06繼承后子類(lèi)父類(lèi)成員變量的特點(diǎn)
 A:繼承后子類(lèi)父類(lèi)成員變量的特點(diǎn)
   a:子類(lèi)的對(duì)象調(diào)用成員變量的時(shí)候,子類(lèi)自己有,使用子類(lèi),子類(lèi)自己沒(méi)有調(diào)用的父類(lèi)
       class Fu{
            //Fu中的成員變量。
            int num = 5;
        }
        
        class Zi extends Fu{
            //Zi中的成員變量
            int num2 = 6;
            //Zi中的成員方法
            public void show()
            {
                //訪問(wèn)父類(lèi)中的num
                System.out.println("Fu num="+num);
                //訪問(wèn)子類(lèi)中的num2
                System.out.println("Zi num2="+num2);
            }
        }
        
        class Demo{
            public static void main(String[] args) 
            {
                Zi z = new Zi(); //創(chuàng)建子類(lèi)對(duì)象
                z.show(); //調(diào)用子類(lèi)中的show方法
            }
        }
 b:當(dāng)子父類(lèi)中出現(xiàn)了同名成員變量
     class Fu{
        //Fu中的成員變量。
        int num = 5;
    }
    
    class Zi extends Fu{
        //Zi中的成員變量
        int num = 6;
        void show(){   
            //子類(lèi)的局部變量
            int num=7
            
            //直接訪問(wèn),遵循就近查找原則
            System.out.println(num);//7
            
            //子父類(lèi)中出現(xiàn)了同名的成員變量時(shí)
            //在子類(lèi)中需要訪問(wèn)父類(lèi)中非私有成員變量時(shí),需要使用super關(guān)鍵字
            //訪問(wèn)父類(lèi)中的num
            System.out.println("Fu num="+super.num);//5
            

            //訪問(wèn)子類(lèi)中的num2
            System.out.println("Zi num2="+this.num);//6
        }
    }
    
    class Demo5 {
        public static void main(String[] args) 
        {
            Zi z = new Zi(); //創(chuàng)建子類(lèi)對(duì)象
            z.show(); //調(diào)用子類(lèi)中的show方法
        }
    }
07繼承后子類(lèi)父類(lèi)成員方法的特性_子類(lèi)重寫(xiě)父類(lèi)方法
A:繼承后子類(lèi)父類(lèi)成員方法的特性
  a:子類(lèi)的對(duì)象調(diào)用方法的時(shí)候,子類(lèi)自己有,使用子類(lèi),子類(lèi)自己沒(méi)有調(diào)用的父類(lèi)
    class Fu{
        public void show(){
            System.out.println("Fu類(lèi)中的show方法執(zhí)行");
        }
    }
    class Zi extends Fu{
        public void show2(){
            System.out.println("Zi類(lèi)中的show2方法執(zhí)行");
        }
    }
    public  class Test{
        public static void main(String[] args) {
            Zi z = new Zi();
            z.show(); //子類(lèi)中沒(méi)有show方法,但是可以找到父類(lèi)方法去執(zhí)行
            z.show2();
        }
    }  
 
 b:為什么要有重寫(xiě)?
     class Fu{
         public void method(){
             //上千行代碼
            //Fu類(lèi)中的方法最先存在,那么如果項(xiàng)目需求變了,該方法
            //功能不能夠滿(mǎn)足我們的需求,此時(shí)我們也不會(huì)去改這個(gè)方法
            //因?yàn)轫?xiàng)目中可能有大量的功能已經(jīng)使用到該方法,如果隨意修改可能使調(diào)用該方法的功能出現(xiàn)問(wèn)題
            //所以使用重寫(xiě)方式基于原有功能提供更強(qiáng)的功能
         }   
     }
     class Zi extends Fu{
      
     }
 c:子類(lèi)中出現(xiàn)與父類(lèi)一模一樣的方法時(shí),會(huì)出現(xiàn)覆蓋操作,也稱(chēng)為override重寫(xiě)、復(fù)寫(xiě)或者覆蓋
   class Fu{
        public void show(){
            System.out.println("Fu show");
        }
   }
   
   class Zi extends Fu{
        //子類(lèi)復(fù)寫(xiě)了父類(lèi)的show方法
        public void show(){
            System.out.println("Zi show");
        }
    }
   public  class Test{
        public static void main(String[] args) {
            Zi z = new Zi();
            z.show(); //Zi show 子類(lèi)有直接使用子類(lèi)
        }
    }  
   
08方法覆蓋的需求
A:方法覆蓋的需求 
    a:案例:比如手機(jī),當(dāng)描述一個(gè)手機(jī)時(shí),它具有發(fā)短信,打電話(huà),顯示來(lái)電號(hào)碼功能,
    后期由于手機(jī)需要在來(lái)電顯示功能中增加顯示姓名和頭像,
    這時(shí)可以重新定義一個(gè)類(lèi)描述智能手機(jī),并繼承原有描述手機(jī)的類(lèi)。
    并在新定義的類(lèi)中覆蓋來(lái)電顯示功能,在其中增加顯示姓名和頭像功能

    b:分析:我們不改裝(破壞)原來(lái)的手機(jī),而是再買(mǎi)一個(gè)新的智能手機(jī),不但有原有的功能,而且還有特有功能
           例:廠商發(fā)布新手機(jī)都是基于原有手機(jī)的升級(jí),不會(huì)拿著原有的手機(jī)在賣(mài),新產(chǎn)一款 
      1:分析類(lèi)的構(gòu)建:
           手機(jī)類(lèi)
            屬性(成員變量):無(wú)
            行為(成員方法):
               發(fā)短信
               打電話(huà)
               來(lái)電顯示:顯示來(lái)電號(hào)碼
          智能手機(jī)類(lèi):
            屬性(成員變量):無(wú)
            行為(成員方法):
              發(fā)短信
              打電話(huà)
              來(lái)電顯示:顯示來(lái)電號(hào)碼,顯示姓名和頭像
          
          手機(jī)類(lèi)和智能手機(jī)類(lèi)有共性?xún)?nèi)容:
              發(fā)短信
              打電話(huà)
              顯示來(lái)電號(hào)碼
      
      2:繼承關(guān)系分析:
        對(duì)于發(fā)短信和打電話(huà)功能,讓智能手機(jī)直接沿用(繼承)手機(jī)的就可以
        但是在智能手機(jī)中的來(lái)電顯示不但實(shí)現(xiàn)號(hào)碼,還顯示姓名和頭像,同樣的都是來(lái)電顯示功能,智能手機(jī)的來(lái)電顯示比手機(jī)的功能更加強(qiáng)大,我們考慮使用重寫(xiě)
09方法覆蓋的手機(jī)案例實(shí)現(xiàn)
    //手機(jī)類(lèi)
    class Phone{
        public void sendMessage(){
            System.out.println("發(fā)短信");
        }
        public void call(){
            System.out.println("打電話(huà)");
        }
        public void showNum(){
            System.out.println("來(lái)電顯示號(hào)碼");
        }
    }

    //智能手機(jī)類(lèi)
    class NewPhone extends Phone{
        //覆蓋父類(lèi)的來(lái)電顯示號(hào)碼功能,并增加自己的顯示姓名和圖片功能
        //從現(xiàn)實(shí)生活角度考慮沿用原有的showNum方法名便于用戶(hù)更快熟悉和接受,而不是再起個(gè)新的名字
        //用戶(hù)還需要花費(fèi)大量時(shí)間慢慢接受
        
        public void showNum(){
            //調(diào)用父類(lèi)已經(jīng)存在的功能使用super
            //如果不加super這是調(diào)用子類(lèi)自身的showNum(),自己調(diào)用自己,遞歸
            //方法不斷入棧導(dǎo)致內(nèi)存溢出
            super.showNum();
            

            //增加自己特有顯示姓名和圖片功能
            System.out.println("顯示來(lái)電姓名");
            System.out.println("顯示頭像");
        }
    }

    public class Test {
        public static void main(String[] args) {
            new NewPhone().showNum();//來(lái)電顯示  顯示來(lái)電姓名 顯示頭像
        }
    }
10方法覆蓋的注意事項(xiàng)

A:方法覆蓋的注意事項(xiàng)

a:權(quán)限:子類(lèi)方法覆蓋父類(lèi)方法,必須要保證權(quán)限大于等于父類(lèi)權(quán)限。
  四大權(quán)限:public>默認(rèn)=protected>private
   
   class Fu{    
        void show(){

        }
        public void method(){

        }
    }
    class Zi() extends Fu{
        public void show(){//編譯運(yùn)行沒(méi)問(wèn)題

        }  
        void method(){//編譯錯(cuò)誤

        }     
    }
 b:方法定義:子類(lèi)方法和要重寫(xiě)的父類(lèi)的方法:方法的方法名和參數(shù)列表都要一樣。
   關(guān)于方法的返回值:
     如果是基本數(shù)據(jù)類(lèi)型,子類(lèi)的方法和重寫(xiě)的父類(lèi)的方法返回值類(lèi)型必須相同
     如果是引用數(shù)據(jù)類(lèi)型,子類(lèi)的方法和重寫(xiě)的父類(lèi)的方法返回值類(lèi)型可以相同或者子類(lèi)方法的返回值類(lèi)型是父類(lèi)方法返回值類(lèi)型的子類(lèi)
     class Fu{    
        int show(){

        }
        public Fu method(){

        }
        
        public Fu method2(){

        }
        
    }
    class Zi() extends Fu{
        public int show(){//返回值為基本類(lèi)型的重寫(xiě)

        }  
        public Fu method(){//子類(lèi)的方法和重寫(xiě)的父類(lèi)的方法返回值類(lèi)型可以相同

        }     
        public Zi method2(){//子類(lèi)方法的返回值類(lèi)型是父類(lèi)方法返回值類(lèi)型的子類(lèi)

        }     
    }
 c:重載與重寫(xiě)對(duì)比:
    重載:
        權(quán)限修飾符(public private 默認(rèn)):無(wú)關(guān)
        方法名:重載的兩個(gè)方法的方法名必須相同
        形參列表:
          形參類(lèi)型的順序不同
          形參的個(gè)數(shù)不同
          形參的類(lèi)型不同
          三者至少滿(mǎn)足一個(gè)
        返回值類(lèi)型:
          重載與返回值類(lèi)型無(wú)關(guān)
    重寫(xiě):
        權(quán)限修飾符(public private 默認(rèn)): 
          子類(lèi)方法的權(quán)限>=父類(lèi)的方法的權(quán)限
        方法名: 
          子類(lèi)方法和父類(lèi)方法必須相同
        形參列表: 
           子類(lèi)方法和父類(lèi)方法的形參列表必須相同
        返回值類(lèi)型:
          基本類(lèi)數(shù)據(jù)類(lèi)型:
            必須相同
          引用數(shù)據(jù)類(lèi)型:
           子類(lèi)方法的返回值類(lèi)型和父類(lèi)方法的返回值類(lèi)型相同
           或者
           子類(lèi)方法的返回值類(lèi)型是父類(lèi)方法的返回值類(lèi)型的 子類(lèi)
11抽象類(lèi)的產(chǎn)生
  A:抽象類(lèi)的產(chǎn)生
    a:分析事物時(shí),發(fā)現(xiàn)了共性?xún)?nèi)容,就出現(xiàn)向上抽取。會(huì)有這樣一種特殊情況,就是方法功能聲明相同,但方法功能主體不同。那么這時(shí)也可以抽取,但只抽取方法聲明,不抽取方法主體。那么此方法就是一個(gè)抽象方法。
12抽象類(lèi)的定義格式
 A:抽象方法定義的格式:
   a:public abstract 返回值類(lèi)型 方法名(參數(shù));
     抽象類(lèi)定義的格式:
     abstract class 類(lèi)名 {
        
      }
    b:抽象類(lèi)示例代碼:
       /*
         *  定義類(lèi)開(kāi)發(fā)工程師類(lèi)
         *    EE開(kāi)發(fā)工程師 :  工作
         *    Android開(kāi)發(fā)工程師 : 工作
         *    
         *    根據(jù)共性進(jìn)行抽取,然后形成一個(gè)父類(lèi)Develop
         *    定義方法,工作: 怎么工作,具體干什么呀
         *    
         *    抽象類(lèi),不能實(shí)例化對(duì)象, 不能new的
         *    不能創(chuàng)建對(duì)象的原因:  如果真的讓你new了, 對(duì)象.調(diào)用抽象方法,抽象方法沒(méi)有主體,根本就不能運(yùn)行
         *    抽象類(lèi)使用: 定義類(lèi)繼承抽象類(lèi),將抽象方法進(jìn)行重寫(xiě),創(chuàng)建子類(lèi)的對(duì)象
         */
        public abstract class Develop {
           //定義方法工作方法,但是怎么工作,說(shuō)不清楚了,講不明白
            //就不說(shuō), 方法沒(méi)有主體的方法,必須使用關(guān)鍵字abstract修飾
            //抽象的方法,必須存在于抽象的類(lèi)中,類(lèi)也必須用abstract修飾
            public abstract void work();
        }
13抽象類(lèi)的使用方式
A:抽象類(lèi)的使用方式
 /*
 *  定義類(lèi),JavaEE的開(kāi)發(fā)人員
 *  繼承抽象類(lèi)Develop,重寫(xiě)抽象的方法
 */
public class JavaEE extends Develop{
    //重寫(xiě)父類(lèi)的抽象方法
    //去掉abstract修飾符,加上方法主體
    public void work(){
        System.out.println("JavaEE工程師在開(kāi)發(fā)B/S 軟件");
    
    }
}
/*
 *  定義Android類(lèi),繼承開(kāi)發(fā)人員類(lèi)
 *  重寫(xiě)抽象方法
 */
public class Android extends Develop{
     public void work(){
         System.out.println("Android工程師開(kāi)發(fā)手機(jī)軟件");
     }
}

/*
 *  測(cè)試抽象類(lèi)
 *    創(chuàng)建他的子類(lèi)的對(duì)象,使用子類(lèi)的對(duì)象調(diào)用方法
 */
public class Test {
    public static void main(String[] args) {
         JavaEE ee = new JavaEE();
         ee.work();//"JavaEE工程師在開(kāi)發(fā)B/S 軟件"
         
         Android and = new Android();
         and.work();//"Android工程師開(kāi)發(fā)手機(jī)軟件"
    }
}
        
14抽象類(lèi)特點(diǎn)

A:抽象類(lèi)的特點(diǎn)

a:抽象類(lèi)和抽象方法都需要被abstract修飾。抽象方法一定要定義在抽象類(lèi)中。
b:抽象類(lèi)不可以直接創(chuàng)建對(duì)象,原因:調(diào)用抽象方法沒(méi)有意義。
c:只有覆蓋了抽象類(lèi)中所有的抽象方法后,其子類(lèi)才可以創(chuàng)建對(duì)象。否則該子類(lèi)還是一個(gè)抽象類(lèi)。
之所以繼承抽象類(lèi),更多的是在思想,是面對(duì)共性類(lèi)型操作會(huì)更簡(jiǎn)單。
  abstract class A{
      public abstract void func();
      public abstract void func2();
  }
  class A2 extends A{//A2把A中的兩個(gè)抽象方法都重寫(xiě)掉了
                       //A2類(lèi)不再是抽象類(lèi)
       public void func(){}
       public void func2(){}
  }

  abstract class A3 extends A{//含有抽象方法的類(lèi)一定是抽象類(lèi)
       public void func(){

       }
       //public abstract void func2();//func2相當(dāng)于被繼承下來(lái)
  }
15抽象類(lèi)的設(shè)計(jì)思想 4:40
A:抽象類(lèi)的設(shè)計(jì)思想
  a:抽象類(lèi)的作用:繼承的體系抽象類(lèi),強(qiáng)制子類(lèi)重寫(xiě)抽象的方法
    抽象員工:
      規(guī)定一個(gè)方法,work工作
      EE員工,Android員工 
       
       Develop類(lèi) 抽象類(lèi)
       abstract work();
           |
    -------------
   |             |
  EE            Android  //是我開(kāi)發(fā)的一員必須工作
  work(){}       work(){}
16抽象類(lèi)的細(xì)節(jié)

A:抽象類(lèi)的細(xì)節(jié)

 a:抽象類(lèi)一定是個(gè)父類(lèi)?    
    是的,因?yàn)椴粩喑槿《鴣?lái)的。
 b:抽象類(lèi)中是否可以不定義抽象方法?
   是可以的,那這個(gè)抽象類(lèi)的存在到底有什么意義呢?不讓該類(lèi)創(chuàng)建對(duì)象,方法可以直接讓子類(lèi)去使用
   (適配器設(shè)計(jì)模式)
    /*
     *   抽象類(lèi),可以沒(méi)有抽象方法,可以定義帶有方法體的方法
     *   讓子類(lèi)繼承后,可以直接使用
     */
    public  abstract class Animal {
         public void sleep(){
             System.out.println("動(dòng)物睡覺(jué)");
         }
        
    }
    public class Cat extends Animal{

    }     
    
    public class Test {
        public static void main(String[] args) {
            //Cat c = new Cat();
            new Cat().sleep();//不讓該類(lèi)創(chuàng)建對(duì)象,方法可以直接讓子類(lèi)去使用
        }
    }
 c:抽象關(guān)鍵字abstract不可以和哪些關(guān)鍵字共存?    

? 1:private:私有的方法子類(lèi)是無(wú)法繼承到的,也不存在覆蓋,

             而abstract和private一起使用修飾方法,abstract既要子類(lèi)去實(shí)現(xiàn)這個(gè)方法,
             而private修飾子類(lèi)根本無(wú)法得到父類(lèi)這個(gè)方法?;ハ嗝?。 
    
    /*
     *   抽象類(lèi),可以沒(méi)有抽象方法,可以定義帶有方法體的方法
     *   讓子類(lèi)繼承后,可以直接使用
     */
    public  abstract class Animal {
     
         // private abstract void show();
         //抽象方法,需要子類(lèi)重寫(xiě), 如果父類(lèi)方法是私有的,子類(lèi)繼承不了,也就沒(méi)有了重寫(xiě)
    }
 

?

 2:final,暫時(shí)不關(guān)注,后面學(xué)

? 3:static,暫時(shí)不關(guān)注,后面學(xué)

17員工案例分析

A:員工案例分析:
a:需求描述:

    某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ī)客戶(hù)端軟件
    ?    網(wǎng)絡(luò)維護(hù)工程師:?jiǎn)T工號(hào)為xxx的 xxx員工,正在檢查網(wǎng)絡(luò)是否暢通
    ?    硬件維護(hù)工程師:?jiǎn)T工號(hào)為xxx的 xxx員工,正在修復(fù)打印機(jī)

b:繼承體系:

                    員工
                     |
   --------------------------------------------
   |                                          |
 研發(fā)部員工                                 維護(hù)部員工
   |                                          |

------------- -----------
| | | |
JavaEE工程師 Android工程師 網(wǎng)絡(luò)維護(hù)工程師 硬件維護(hù)工程師

c:詳細(xì)描述:
? 根據(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ī)客戶(hù)端軟件
?    網(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)用

18員工案例Employee類(lèi)的編寫(xiě)

A:員工案例Employee類(lèi)的編寫(xiě):按照分析的繼承體系來(lái)逐個(gè)實(shí)現(xiàn)

     /*
     *  定義員工類(lèi)
     *    內(nèi)容,都是所有子類(lèi)的共性抽取
     *      屬性: 姓名,工號(hào)
     *      方法: 工作
     */
   public abstract class Employee {
        private String id;// 員工編號(hào)
        private String 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(); 
 }
19員工案例的子類(lèi)的編寫(xiě)

B:員工案例的子類(lèi)的編寫(xiě):

 /*
 *  定義研發(fā)員工類(lèi)
 *    屬于員工中的一種, 繼承員工類(lèi) 
 *    抽象類(lèi)Develop 給自己的員工定義自己有的屬性
 */
public abstract class Develop extends Employee{

}

/*
 *  描述JavaEE開(kāi)發(fā)工程師類(lèi)
 *    工號(hào),姓名 工作方法
 *  其他的員工,也具備這些共性,抽取到父類(lèi)中,自己就不需要定義了
 *  是研發(fā)部員工的一種,繼承研發(fā)部類(lèi)
 */
public class JavaEE extends Develop{
    //重寫(xiě)他父類(lèi)的父類(lèi)的抽象方法
    public void work(){
        //調(diào)用父類(lèi)的get方法,獲取name,id值
        System.out.println("JavaEE的工程師開(kāi)發(fā)淘寶"+ super.getName()+".."+super.getId());
    }
}
/*
*定義Android工程師 繼承 研發(fā)部員工類(lèi),重寫(xiě)工作方法
*/
public class Android extends Developer {
  @Override
   public void work() {
    System.out.println("員工號(hào)為 " + getId() + " 的 " + getName() + " 員工,正在研發(fā)淘寶手機(jī)客戶(hù)端軟件");
  }
}
/*
 *   定義維護(hù)員工類(lèi),屬于員工中的一種
 *   繼承員工類(lèi)
 *   抽象類(lèi)Maintainer 給自己的員工定義自己有的屬性
 */
public abstract class Maintainer extends Employee{

}

/*
 *  描述的是網(wǎng)絡(luò)維護(hù)工程師
 *  屬于維護(hù)部的員工,繼承維護(hù)部類(lèi)
 */
public class Network extends Maintainer{
    public void work(){
        System.out.println("網(wǎng)絡(luò)工程師在檢查網(wǎng)絡(luò)是否暢通"+super.getName()+"..."+super.getId());
    }
}

?

/*
 *定義Hardware硬件維護(hù)工程師 繼承 維護(hù)部員工類(lèi),重寫(xiě)工作方法
 */
public class Hardware extends Maintainer {
    @Override
    public void work() {
        System.out.println("員工號(hào)為 " + getId() + " 的 " + getName() + " 員工,正在修復(fù)打印機(jī)");
    }
}
20總結(jié)

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/67148.html

相關(guān)文章

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

    摘要:構(gòu)造方法名稱(chēng)必須和類(lèi)型保持一致。構(gòu)造方法沒(méi)有具體的返回值。構(gòu)造方法之間的調(diào)用,可以通過(guò)關(guān)鍵字來(lái)完成。由于構(gòu)造方法中使用了構(gòu)造方法就會(huì)壓棧,并將張三傳遞給。程序繼續(xù)執(zhí)行構(gòu)造方法中的這時(shí)會(huì)將賦值給成員屬性。賦值結(jié)束構(gòu)造方法彈棧。 01構(gòu)造方法引入 * A:構(gòu)造方法的引入 在開(kāi)發(fā)中經(jīng)常需要在創(chuàng)建對(duì)象的同時(shí)明確對(duì)象的屬性值,比如員工入職公司就要明確他的姓名、年齡等屬性信息。 ...

    MASAILA 評(píng)論0 收藏0
  • Eclipse快捷鍵 文檔 jar包 4、修飾符混合5、何時(shí)定義變量為成員變量 6、類(lèi)抽象類(lèi)、接

    摘要:當(dāng)遇到方法參數(shù)為抽象類(lèi)類(lèi)型時(shí),要傳入一個(gè)實(shí)現(xiàn)抽象類(lèi)所有抽象方法的子類(lèi)對(duì)象。根據(jù)向酒店中,增加多名員工其中包含名經(jīng)理,名廚師名服務(wù)員。 01eclipse快捷鍵 * A: ? Ctrl+T:查看所選中類(lèi)的繼承樹(shù) 例如,在下面代碼中,選中Teacher類(lèi)名,然后按Ctrl+T,就會(huì)顯示出Teacher類(lèi)的繼承關(guān)系 * B:? 查看所選中方法的源代碼 Ctrl+...

    tinysun1234 評(píng)論0 收藏0
  • 面向?qū)ο蠼涌诙鄳B(tài)

    摘要:多態(tài)的前提是必須有子父類(lèi)關(guān)系或者類(lèi)實(shí)現(xiàn)接口關(guān)系,否則無(wú)法完成多態(tài)。具體格式如下父類(lèi)引用指向子類(lèi)對(duì)象就是多態(tài)的定義格式。多態(tài)的轉(zhuǎn)型分為向上轉(zhuǎn)型與向下轉(zhuǎn)型兩種向上轉(zhuǎn)型當(dāng)有子類(lèi)對(duì)象賦值給一個(gè)父類(lèi)引用時(shí),便是向上轉(zhuǎn)型,多態(tài)本身就是向上轉(zhuǎn)型的過(guò)程。 第3天 面向?qū)ο?今日內(nèi)容介紹? 接口? 多態(tài)? 筆記本案例今日學(xué)習(xí)目標(biāo)? 寫(xiě)出定義接口的格式? 寫(xiě)出實(shí)現(xiàn)接口的格式?...

    wangdai 評(píng)論0 收藏0
  • Java編程基礎(chǔ)10——面向?qū)ο骭多態(tài)&抽象類(lèi)&接口

    摘要:案例演示抽象類(lèi)的成員特點(diǎn)抽象類(lèi)的成員方法特性抽象方法強(qiáng)制要求子類(lèi)做的事情。抽象類(lèi)中定義的是該繼承體系的共性功能。 1.多態(tài)的概述及其成員訪問(wèn)特點(diǎn)代碼體現(xiàn) A:多態(tài)(polymorphic)概述 事物存在的多種形態(tài) B:多態(tài)前提- 1.要有繼承關(guān)系 2.要有方法重寫(xiě) 3.要有父類(lèi)引用指向子類(lèi)對(duì)象。 C:多態(tài)中的成員訪問(wèn)特點(diǎn)之 成員變量:編譯和運(yùn)行都看父類(lèi)。 成員方法:編...

    dunizb 評(píng)論0 收藏0
  • 策略模式

    簡(jiǎn)介 1.學(xué)習(xí)本篇博文,我們知道在什么場(chǎng)景下使用策略模式。2.策略模式的優(yōu)缺點(diǎn)。3.策略模式的思想。 場(chǎng)景 某公司需要每個(gè)周五每名員工都要提交周報(bào),在該公司可以提交周報(bào)的行為或者算法有:郵箱提交、SVN、Git后兩種一般是開(kāi)發(fā)部門(mén)使用的(剛開(kāi)始還沒(méi)有Git提交方式)。 那么在該場(chǎng)景中我們是如何設(shè)計(jì)業(yè)務(wù)邏輯呢? 你可能這么想,我用繼承的方式多好,在一個(gè)超類(lèi)中都定義有郵箱提交,SVN提交,然后具體角色...

    hidogs 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<