java 面向物件3
阿新 • • 發佈:2018-11-21
多型的概述
- 一:多型(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關鍵字修飾
抽象類的成員特點
- 成員變數:既可以是變數,也可以是常量。abstract不可以修飾成員變數
- 構造方法: 抽象類是具有構造方法的(用於子類訪問父類的資料初始化)
- 成員方法:既可以是抽象的,也可以是非抽象的。
抽象方法的成員特性
抽象方法 強制要求子類做的事情
非抽象方法 子類繼承的事情 提高程式碼的複用性
介面
- 介面概述:
- 從俠義的角度講就是指java中的interface
- 從廣義上講對外提供規則
- 介面特點
- 介面用關鍵字interface表示
interface 介面名 {} - 類實現介面用implements表示
class 類名 implements 介面名{} - 介面不能實踐化
以多型的方式來例項化 - 介面的子類
可以是抽象類,但是意義不大
可以具體類。要重寫介面中的所有抽象方法。
- 介面用關鍵字interface表示
介面的成員特點
- 介面成員特點
- 成員變數:只能是常量(而且是預設是常量)
* 預設修飾符:public static final
* 最好自己給出 - 構造方法:介面沒有構造方法
- 成員方法:只能是抽象方法
* 預設修飾: public abstract
* 建議自己給出
- 成員變數:只能是常量(而且是預設是常量)
類與類 ,類與介面,介面和介面
- 類和類 : 繼承關係,只有單繼承,可以多層繼承
- 類和介面:實現關係,可以單實現,也可以多實現。
- 介面和介面: 繼承關係可單繼承,也可多繼承
抽象類和介面的區別
(成員之間區別)
- 抽象類:
- 成員變數:可以變數,也可以是常量
- 構造方法:有
- 成員方法: 可以抽象,也可非抽象
- 介面
- 成員變數:只可以是常量
- 成員方法:只可以是抽象的
(關係之間區別)
- 類和類:繼承,單繼承
- 類和介面: 實現,單繼承,多實現
- 介面也介面:繼承,單繼承,多繼承
(設計理念區別) - 抽象類 被繼承體現的是:”is a”的關係。抽象類中定義的是該繼承體系的共性功能。
- 介面 被實現體現的是:”like a”的關係。介面中定義的是該繼承體系的擴充套件功能。