Java---casting(对象转型)

1.一个基类的引用类型变量可以“指向”其子类对象

2.一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)

3.可以使用  引用变量  instanceof  类名  来判断该引用变量所“指向”的对象是否属于该类或该类的子类。

4.子类对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting).

public class TestCasting {

public void f(Animal a) {
 System.out.println("name:" + a.name);
 if (a instanceof Dog) {
  Dog d = (Dog) a;
  System.out.println("furColor:" + d.furColor);
 }
}//如果传入的参数是Animal类的对象,则只打印name;如果传入的参数是它了子类Dog对象,则还需要打印furColor


public static void main(String[] args) {
Animal a=new Animal("animal");
Dog d=new Dog("Carl", "black");

System.out.println(d instanceof Animal);//true
System.out.println(a instanceof Dog);//false
System.out.println(a instanceof Animal);//true

Animal a1=new Dog("dog1", "white");
System.out.println("a1.name:"+a1.name+",a1.furColor:"+a1.furColor);//出错,基类的对象a1不能访问子类新增加的成员furColor
Dog d1=(Dog)a1;//可以将一个基类对象a1强制转换为子类对象d1
System.out.println("d1.name:"+d1.name+",d1.furColor:"+d1.furColor);

TestCasting test=new TestCasting();

 test.f(a);//name:animal

 test.f(d);//name:Carl  furColor:black

}

}

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;
}
}

你可能感兴趣的:(java)