1.對象轉移與基礎類型的轉換類似,隻不過這個是針對對象的類型轉換;
2.一個基類的引用類型變量可以指向其子類的對象,也就是說基類可以把子類當做自己這個類的一個對象引用,但是有一些限制(見下條)。
如Animal類的一個對象a,可以轉化成Dog類的一個對象使用。
3.但是基類的引用不能其子類新增的變量和方法。也就是說,a這個Animal對象轉化成Dog後可以當Animal用,但不可以當Dog來用;
4. 見下例:
class Animal{
String name;
public Animal(String name){
this.name = name;
}
}
class Dog extends Animal{
String furcolor;
public Dog(String name,String furcolor){
super(name);
this.furcolor = furcolor;
}
}
class Cat extends Animal{
String eyecolor;
public Cat(String name,String eyecolor){
super(name);
this.eyecolor = eyecolor;
}
}
public class TestCasting{
public static void main(String[] args){
Animal a = new Animal("Animal_Name");
Dog d = new Dog("Dog_Name","Yellow");
Cat c = new Cat("Cat_Name","Blue");
System.out.println(a.name);
System.out.println(d.name+" "+d.furcolor);
System.out.println(c.name+" "+c.eyecolor);
a = new Dog("Snow","White");
System.out.println(a.name);
//System.out.println(a.furcolor);//error
System.out.println(a instanceof Animal);
System.out.println(a instanceof Dog);
Dog d2 = (Dog)a;
System.out.println(d2.furcolor);
TestCasting tc = new TestCasting();//記住,要調用main函數裡面的方法,要先建立一個main類的對象,用該對象調用
tc.getInfo(a);
tc.getInfo(d);
tc.getInfo(c);
tc.getInfo(d2);
}
public void getInfo(Animal a){
System.out.println("name is "+a.name);
if(a instanceof Dog){
Dog dog = (Dog)a;
System.out.println("furcolor is "+dog.furcolor);
}
else if(a instanceof Cat){
Cat cat = (Cat)a;
System.out.println("eyecolor is "+cat.eyecolor);
}
}
}