一、多態:對象的多種形態(繼承是多態的實現基礎)
父類Animal
package shuqi;
public class Animal{
//public int age=10;
//public String name;
public void eat(){
System.out.println("動物可以吃東西");
}
//public Animal(){
// System.out.println("Animal類執行了");
// //age=20;
}
}
子類Dog
package shuqi;
public class Dog extends Animal {
public int age=20;
public void eat(){
System.out.println("狗可以吃肉");
}
public void watchDoor(){
System.out.println("狗可以看門");
}
}
子類Cat
package shuqi;
public class Cat extends Animal {
}
測試類Initial
package shuqi;
public class Initial {
public static void main(String[] args) {
Animal obj1=new Animal();
Animal obj2=new Dog();
Animal obj3=new Cat();
obj1.eat(); //引用父類的eat方法
obj2.eat(); //這個時候子類中的eat已經重寫了,所以引用的是子類的eat方法
obj3.eat(); //繼承父類eat方法
// Dog dog = new Dog();
// Animal animal=dog;
// Dog dog2=(Dog)animal;
// if(animal instanceof Cat){
// Cat cat=(Cat)animal;
// }
// else{
// System.out.println("無法進行類型轉化");
// }
//
}
}
(1)引用多態
父類的引用可以指向本類的對象 Animal obj1=new Animal();
父類的引用可以指向子類的對象 Animal obj2=new Dog();
(2)方法多態
創建本類對象時,調用的方法爲本類方法
創建子類對象時,調用的方法爲子類重寫的方法或者繼承的方法
子類中獨有的方法不可以被父類的引用指向子類的對象所調用
二、多態的引用類型轉換
(1)向上類型轉換(隱式/自動類型轉換),是小類型到大類型的轉換
(2)向下類型轉換(強制類型轉換),是大類型到小類型的轉換
(3)instanceof運算符,來解決引用對象的類型,避免類型轉換的安全性問題。
package shuqi;
public class Initial {
public static void main(String[] args) {
// Animal obj1=new Animal();
// Animal obj2=new Dog();
// Animal obj3=new Cat();
// obj1.eat();
// obj2.eat();
// obj3.eat();
Dog dog = new Dog();
Animal animal=dog;
Dog dog2=(Dog)animal;
if(animal instanceof Cat){
Cat cat=(Cat)animal;
}
else{
System.out.println("無法進行類型轉化");
}
}
}