多態
定義:是指同一行爲,具有多種不同表現形式。
多態的前提:1.繼承或實現【二選一】
2.方法的重寫
3.父類引用指向子類對象
多態的體現:
格式: 父類類型 變量名 = new 子類對象;
變量名.方法名();
代碼如下:
Fu f = new zi();
f.方法名
當使用多態方式調用方法時,首先檢查父類中是否有該方法,若果沒有,則編譯出錯;如果有,執行的是子類重寫後的方法。
代碼如下:
//定義父類
public abstract class Animal01 {
public abstract void eat();
}
//定義子類
public class Cat01 extends Animal01 {
public void eat(){
System.out.println("吃魚");
}
}
public class Dog01 extends Animal01{
public void eat() {
System.out.println("吃骨頭");
}
}
//定義測試類
public class Test01 {
public static void main(String[] args) {
//多態形式創建對象
Animal01 animal01 = new Cat01();
//調用的是Cat 的eat
animal01.eat();
//多態形式創建對象
Animal01 animal02 = new Dog01();
//調用的是Dog的eat
animal02.eat();
}
}
引用類型轉換
向上轉型:多態本身是子類類型向父類類型轉換的過程,這個過程是默認的。
當父類引用指向一個子類對象時,便是向上轉型。
使用格式:
父類類型 變量名 = new 子類類型();
如:Animal a = new Cat();
向下轉型:父類類型向子類類型向下轉換的過程,這個過程是強制的。
一個已經向上轉型的子類對象,將父類引用轉爲子類引用,可以使用強制類型轉換的格式,便是向下轉型。
使用格式:
子類類型 變量名 = (子類類型) 父類變量名;
如:Cat c=(Cat) a
爲何使用轉型:
當使用多態方式調用方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤。也就是說,不能調用子類擁有,而父類沒有的方法。這也是多態給我們帶來的一點"小麻煩"。所以,想要調用子類特有的方法,必須做向下轉型。
演示代碼如下:
//定義父類 Animal
public abstract class Animal {
public abstract void eat();
}
//定義子類 Cat
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("吃魚");
}
public void sleep() {
System.out.println("睡覺");
}
}
//測試類
public class Test {
public static void main(String[] args) {
//向上轉型
Animal a = new Cat();
a.eat();//調用的是Animal的eat方法
//向下轉型
Cat c = (Cat)a;
c.sleep();//調用的是Cat的sleep方法
}
}