这一次谈一谈Java中对象转型的问题,在Java中引入继承机制就存在这一转换的问题。在Java中对象转型注意以下四点:
1.一个基类的引用类型变量可以指向其子类的对象;
2.一个基类的引用变量不能访问其子类对象新增加的成员(属性和方法);
3.可以使用 对象名 instanceof 类名 来判断该引用型变量所指向的对象是否属于该类或该类的子类;
4.子类的对象可以当做基类的对象来使用称作向上转型;反之称作向下转型;
下面用一个简单的Java程序来说明对象转型这个问题。(对象转型可以保证程序的可扩展性)
源程序:
class Animal{ // 定义动物类
String name;
Animal(String name) {
this.name = name;
}
}
class Dog extends Animal{ // 定义狗类,继承自动物类
String furcolor;
Dog(String name,String furcolor) {
super(name);
this.furcolor = furcolor;
}
}
class Cat extends Animal{ // 定义猫类,继承自动物类
String eyecolor;
Cat(String name, String eyecolor){
super(name);
this.eyecolor = eyecolor;
}
}
public class datatest { // 测试类
public static void main(String[] args) {
datatest test = new datatest(); // 定义一个测试类
Animal a = new Animal("animal"); // 定义一个动物类
Dog d = new Dog("bigyellow", "yellow"); // 定义一个狗类
Cat c = new Cat("Caddy", "blue"); // 定义一个猫类
// 3次调用测试类的f方法,其中参数分别为动物类、狗类、猫类的对象
test.f(a);
test.f(d);
test.f(c);
}
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);
} else if(a instanceof Cat){
Cat c = (Cat)a;
System.out.println("eyecolor: " + c.eyecolor);
}
}
}