向上转型特点:
- 对变量的影响:
转型后的对象,可以使用继承自父类的变量,而且变量值是父类变量的值。
不可以使用子类新增而父类没有的变量。 - 对方法的影响:
转型后的对象,可以使用继承自父类的方法,而且执行的是子类重写的方法。
不可以使用子类新增而父类没有方法。
例子如下:
package testUpcast;
public class Animal {
String furColor="black";
public void run(){
System.out.println("Run as an animal");
}
}
package testUpcast;
public class Cat extends Animal {
String furColor="white";
String size ="36xp";
@Override
public void run(){
System.out.println("Run as a cat");
}
public void eat(){
System.out.println("Eating likes a cat");
}
}
package testUpcast;
public class Main{
public static void main(String[]args){
Animal c=new Cat();
//Animal's furColor is black,不是white说明变量是继承自父类
System.out.println("Animal's furColor is "+c.furColor);
//System.out.println("Its furColor is "+c.size);//编译错误
c.run();//Run as a cat,说明方法是继承子类重写的方法
//a.eat();//编译错误
}
}
结果:
Animal's furColor is black
Run as a cat
结论:
(Animal)c 可以调用furColor 而且结果为black,说明了:子类可以调用继承自父类的变量,但值为父类变量值。
(Animal)c 不能调用size,说明了:子类无法调用子类新增父类没有的变量。
(Animal)c 可以调用run()而且结果为run as a cat,说明了:子类可以调用继承自父类的方法,但执行的是子类重写的方法。
(Animal)c 不能调用eat(),说明了:子类无法调用子类新增父类没有的方法。