Java中的多態及類型轉換

一、多態:對象的多種形態(繼承是多態的實現基礎)

父類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("無法進行類型轉化");
	}
	
	
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章