1. 程式人生 > >java 面向物件3

java 面向物件3

多型的概述

  • 一:多型(polymorphic)
    • 事物存在多種形態
  • 二:多型前提
    • 要有繼承關係
    • 要有方法重寫
    • 要由父類引用指向子類物件

多型中的成員訪問特點 成員變數

* 成員變數 
	* 編譯看左邊(父類),執行看右邊(父類)

編譯是父類,執行結果也是父類

class Demo2_Polymorphic{
public static vodid main (String[] args){
Father f = new Son();
System.out.println
(f.num); } } class Father{ int num = 10; } class Son extends Father{ int num = 20; }

上面程式碼輸出結果為: 10

成員變數訪問記憶體圖

多型的成員訪問特點 成員方法

  • 成員方法
    • 編譯看左邊(父類),執行看右邊(子類)
      註釋: 編譯是否通過看的是父類,執行結果是子類。
class Demo2_Polymorphic{
public static vodid main (String[] args){
Father f = new Son();
f.print();
	}
} class Father{ int num = 10; public void print{ System.out.println("Father"); } } class Son extends Father{ int num = 20; public void print("Son"); }

在這裡插入圖片描述

多型的成員訪問特點 靜態成員方法

  • 靜態成員方法
    編譯看左邊(父類),執行看的 是左邊(父類)
    靜態和類相關,算不上重寫,所以,訪問還是左邊的
    只有非靜態的成員方法,編譯看左邊,執行看右邊

向上轉型和向下轉型

Person p = new Student();//向上轉型
Student s = (Student)p;//向下轉型

多型的利弊

  • 多型 的 利:
    • 提高程式碼的維護性(繼承保證)
    • 提高程式碼的擴充套件性 (由多型保證)
  • 多型的 弊:
    • 不能使用子類的特有屬性和行為。

抽象類的概述和特點

  • 抽象類特點
    • 抽象類和抽象方法必須用abstract關鍵字修飾
      • abstract class 類名{}
      • public abstract void eat();
    • 抽象類不一定由抽象方法,有抽象方法的類一定是抽象類(介面的方法都是抽象方法)
    • 抽象類不能被例項化,所以可由多型的方式,由子類例項化。
    • 抽象類的子類
      • 要麼是抽象類
      • 要麼重寫抽象類中的抽象方法

抽象類的成員特點

  • 成員變數:既可以是變數,也可以是常量。abstract不可以修飾成員變數
  • 構造方法: 抽象類是具有構造方法的(用於子類訪問父類的資料初始化)
  • 成員方法:既可以是抽象的,也可以是非抽象的。

抽象方法的成員特性

抽象方法 強制要求子類做的事情
非抽象方法 子類繼承的事情 提高程式碼的複用性

介面

  • 介面概述:
    • 從俠義的角度講就是指java中的interface
    • 從廣義上講對外提供規則
  • 介面特點
    • 介面用關鍵字interface表示
      interface 介面名 {}
    • 類實現介面用implements表示
      class 類名 implements 介面名{}
    • 介面不能實踐化
      以多型的方式來例項化
    • 介面的子類
      可以是抽象類,但是意義不大
      可以具體類。要重寫介面中的所有抽象方法。

介面的成員特點

  • 介面成員特點
    • 成員變數:只能是常量(而且是預設是常量)
      * 預設修飾符:public static final
      * 最好自己給出
    • 構造方法:介面沒有構造方法
    • 成員方法:只能是抽象方法
      * 預設修飾: public abstract
      * 建議自己給出

類與類 ,類與介面,介面和介面

  • 類和類 : 繼承關係,只有單繼承,可以多層繼承
  • 類和介面:實現關係,可以單實現,也可以多實現。
  • 介面和介面: 繼承關係可單繼承,也可多繼承

抽象類和介面的區別

(成員之間區別)

  • 抽象類:
    • 成員變數:可以變數,也可以是常量
    • 構造方法:有
    • 成員方法: 可以抽象,也可非抽象
  • 介面
    • 成員變數:只可以是常量
    • 成員方法:只可以是抽象的
      (關係之間區別)
  • 類和類:繼承,單繼承
  • 類和介面: 實現,單繼承,多實現
  • 介面也介面:繼承,單繼承,多繼承
    (設計理念區別)
  • 抽象類 被繼承體現的是:”is a”的關係。抽象類中定義的是該繼承體系的共性功能。
    • 介面 被實現體現的是:”like a”的關係。介面中定義的是該繼承體系的擴充套件功能。