10 面向對象四-多態

01_面向對象(多態的概述及其代碼體現)

  • A:多態(polymorphic)概述
    • 事物存在的多種形態
  • B:多態前提
    • a:要有繼承關係。
    • b:要有方法重寫。
    • c:要有父類引用指向子類對象。
  • C:案例演示
    • 代碼體現多態
    • Person p=new Woman();

02_面向對象(多態中的成員訪問特點之成員變量)

  • 成員變量

    • 編譯看左邊(父類),運行看左邊(父類)
    • 這裏寫圖片描述

    • 這裏寫圖片描述

03_面向對象(多態中的成員訪問特點之成員方法)

  • 成員方法
    • 編譯看左邊(父類),運行看右邊(子類)。也叫動態綁定(靜態方法除外)
    • 這裏寫圖片描述

04_面向對象(多態中的成員訪問特點之靜態成員方法)

  • 靜態方法
    • 編譯看左邊(父類),運行看左邊(父類)。
    • (靜態和類相關,算不上重寫,所以,訪問還是左邊的)
    • 只有非靜態的成員方法,編譯看左邊,運行看右邊
    • Person p=new Woman();
      p.talk();//如果talk是靜態方法,那麼他就符合用類調用靜態方法,既不是重寫,也不是動態綁定

06_面向對象(多態中向上轉型和向下轉型)

  • A:案例演示
    • 詳細講解多態中向上轉型和向下轉型
      Person p = new SuperMan();向上轉型
      SuperMan sm = (SuperMan)p;向下轉型
      這裏寫圖片描述

07_面向對象(多態的好處和弊端)

  • A:多態的好處
    • a:提高了代碼的維護性(繼承保證)
    • b:提高了代碼的擴展性(由多態保證)
  • B:案例演示
    • 多態的好處
    • 可以當作形式參數,可以接收任意子類對象
  • C:多態的弊端
    • 不能使用子類的特有屬性和行爲。
  • D:案例演示
    method(Animal a)
    method(Cat c)

08_面向對象(多態中的題目分析題)

  • A:看下面程序是否有問題,如果沒有,說出結果
  • class Fu {
        public void show() {
            System.out.println("fu show");
        }
    }
    
    class Zi extends Fu {
        public void show() {
            System.out.println("zi show");
        }
    
        public void method() {
            System.out.println("zi method");
        }
    }
    
    class Test1Demo {
        public static void main(String[] args) {
            Fu f = new Zi();
            f.method();
            f.show();
        }
    }
    

f.method()報錯,因爲父類沒有,編譯錯誤,
* B:看下面程序是否有問題,如果沒有,說出結果
*
class A {
public void show() {
show2();
}
public void show2() {
System.out.println(“我”);
}
}
class B extends A {
public void show2() {
System.out.println(“愛”);
}
}
class C extends B {
public void show() {
super.show();
}
public void show2() {
System.out.println(“你”);
}
}
public class Test2DuoTai {
public static void main(String[] args) {
A a = new B();
a.show();

            B b = new C();
            b.show();
        }
    }

09_面向對象(抽象類的概述及其特點)

  • A:抽象類概述
    • 抽象就是看不懂的
  • B:抽象類特點
    • a:抽象類和抽象方法必須用abstract關鍵字修飾
      • abstract class 類名 {}
      • public abstract void eat();
    • b:抽象類不一定有抽象方法,有抽象方法的類一定是抽象類或者是接口
    • c:抽象類不能實例化那麼,抽象類如何實例化呢?
      • 按照多態的方式,由具體的子類實例化。其實這也是多態的一種,抽象類多態。
    • d:抽象類的子類
      • 要麼是抽象類
      • 要麼重寫抽象類中的所有抽象方法

10_面向對象(抽象類的成員特點)

  • A:抽象類的成員特點
    • a:成員變量:既可以是變量,也可以是常量。abstract是否可以修飾成員變量?不能修飾成員變量
    • b:構造方法:有。
      • 用於子類訪問父類數據的初始化。
    • c:成員方法:既可以是抽象的,也可以是非抽象的。
  • B:案例演示
    • 抽象類的成員特點
  • C:抽象類的成員方法特性:
    • a:抽象方法 強制要求子類做的事情。
    • b:非抽象方法 子類繼承的事情,提高代碼複用性。
      可被抽象或者非抽象類繼承,若被抽象類繼承,則不用重寫父類抽象方法。

12_面向對象(抽象類練習員工案例)

  • A:案例演示
    • 假如我們在開發一個系統時需要對程序員類進行設計,程序員包含3個屬性:姓名、工號以及工資。
    • 經理,除了含有程序員的屬性外,另爲還有一個獎金屬性。
    • 請使用繼承的思想設計出程序員類和經理類。要求類中提供必要的方法進行屬性訪問。

13_面向對象(抽象類中的面試題)

  • A:面試題1
    • 一個抽象類如果沒有抽象方法,可不可以定義爲抽象類?如果可以,有什麼意義?
    • 可以
    • 這麼做目的只有一個,就是不讓其他類創建本類對象,交給子類完成
  • B:面試題2
    • abstract不能和哪些關鍵字共存
    • static。不能,abstract沒有方法體,而靜態方法,可以類名調用,而abstract方法直接調用無意義
    • final,不能,final不能被重寫,abstract方法必須重寫抽象方法,矛盾
    • private,不能,private修飾後不讓子類訪問,矛盾

14_面向對象(接口的概述及其特點)

  • A:接口概述
    • 從狹義的角度講就是指java中的interface
    • 從廣義的角度講對外提供規則的都是接口
  • B:接口特點
    • a:接口用關鍵字interface表示
      • interface 接口名 {}
    • b:類實現接口用implements表示
      • class 類名 implements 接口名 {}
    • c:接口不能實例化
      • 那麼,接口如何實例化呢?
      • 按照多態的方式來實例化。
    • d:接口的子類
      • a:可以是抽象類。但是意義不大。
      • b:可以是具體類。要重寫接口中的所有抽象方法。(推薦方案)
  • C:案例演示
    • 接口特點

15_面向對象(接口的成員特點)

  • A:接口成員特點
    • 成員變量;只能是常量,並且是靜態的並公共的
      * 默認修飾符:public static final
      * 建議:自己手動給出。
    • 構造方法:接口沒有構造方法。
    • 成員方法:只能是抽象方法。
      * 默認修飾符:public abstract
      * 建議:自己手動給出。
  • B:案例演示
    • 接口成員特點

16_面向對象(類與類,類與接口,接口與接口的關係)

  • A:類與類,類與接口,接口與接口的關係
    • a:類與類:
      • 繼承關係,只能單繼承,可以多層繼承
    • b:類與接口:
      • 實現關係,可以單實現,也可以多實現。沒有方法提,所以可以多實現。
      • 並且還可以在繼承一個類的同時實現多個接口
    • c:接口與接口:
      • 繼承關係,可以單繼承,也可以多繼承
  • B:案例演示
    • 類與類,類與接口,接口與接口的關係

17_面向對象(抽象類和接口的區別)

  • A:成員區別

    • 抽象類:
      • 成員變量:可以變量,也可以常量
      • 構造方法:有
      • 成員方法:可以抽象,也可以非抽象
    • 接口:
      • 成員變量:只可以常量
      • 成員方法:只可以抽象
  • B:關係區別

    • 類與類
      • 繼承,單繼承
    • 類與接口
      • 實現,單實現,多實現
    • 接口與接口
      • 繼承,單繼承,多繼承
  • C:設計理念區別

    • 抽象類 被繼承體現的是:”is a”的關係。抽象類中定義的是該繼承體系的共性功能。
    • 接口 被實現體現的是:”like a”的關係。接口中定義的是該繼承體系的擴展功能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章