多型的好處:
1、提高了程式的維護性(由繼承保證)
2、提高了程式的擴充套件性(由多型保證)
向下轉型
public static void main(String[] args) {
Fu1 f1 = new Zi1();
f1.fun1();
// f1.show1();
//向下轉型
//格式: 子類類名 變數名 = (子類類名)要轉型的變數名;
Zi1 z1 = (Zi1)f1;
z1.show1();
//並不是任意兩個型別之間都可以做向下轉型,只有實際記憶體物件型別與要轉的型別一樣
介面
介面:表示一個類的額外功能的實現
java提供了一個關鍵字表示介面:interface
介面我們可以將它看作成一個特殊的類, 因為介面也會被編譯成一個class檔案
介面注意事項:
1. 介面中只能存在抽象方法, jvm預設會在方法前使用public abstract進行修飾, 剛學java推薦加上
2. 類和介面是實現關係 可以透過關鍵字implements實現介面
3. 當一個具體的類實現一個介面的時候, 必須要實現介面中所有的抽象方法
4. 若一個抽象類實現一個介面的時候,可以選擇性地實現介面中的抽象方法
5. 一個類可以同時實現多個介面,使用逗號隔開
6. 介面和介面存在繼承關係, 並且一個介面可以同時繼承多個介面
7. 介面中只能定義常量, 預設修飾符為public static final
8. 介面無法例項化, 介面中不能出現構造方法
面試題:
java中允許多繼承嗎?
答:
若是類和類之間的繼承,只能單繼承,不能多繼承
若是介面與介面之間的繼承,可以多繼承
abstract關鍵字
java為了表示現實生活中抽象的概念集合,提供了一個關鍵字給我們使用:abstract
abstract 抽象的
可以修飾類,修飾成員方法
1. 被abstract修飾的類是抽象類, 抽象類不能被例項化
2. 被abstract修飾的方法是抽象方法, 抽象方法不能有大括號實現
3. 在抽象類,既可以存在具體實現的方法, 也可以存在抽象方法
4. 若一個類中有抽象方法, 這個類一定是一個抽象類
5. 當一個具體的類繼承一個抽象類, 必須要實現抽象類中的所有抽象方法
6. 當一個抽象類繼承一個抽象類的時候, 可以選擇性地是否重寫抽象方法
抽象類與類中成員的關係:
成員變數: 抽象類既可以存在變數, 也可以存在常量
構造方法: 可以存在構造方法, 是為了將來在繼承關係做初始化的作用
成員方法: 既可以是具體的實現方法, 也可以是抽象方法
思考
1. 一個類如果沒有抽象方法,可不可以定義為抽象類?如果可以,有什麼意義? 可以表示一種概念的集合
2. abstract不能和哪些關鍵字共存
final 不能共存
static 不能共存
private 不能共存