public class Applicaition {
public static void main(String[] args) {
/*
向上转型:子 ---> 父 (自动类型转换)
向下转型:父 ---> 子 (强制类型转换,需要加强制类型转换符)
Java中允许向上转型,也允许向下转型
无论是向上转型还是向下转型,两种类型之间
必须有继承关系,没有继承关系编译器报错
*/
//a5是Animal类型,向下转型成Cat,Animal和Cat之间存在继承关系
Animal a5 = new Cat();
Cat x = (Cat) a5;
x.catchMouse();
//不要随便做强制类型转换---向下转型
//当需要访问子类对象中“特有”的方法
//向下转型有风险吗?表面上a6是一个Animal,实际运行是Bird
Animal a6 = new Bird();
/*
编译器检测到a6这个引用是Animal类型,
而Animal和Bird之间存在继承关系,所以可以向下关系。编译不会出错。
运行阶段,堆内存实际创建的对象是Bird对象
在实际运行过程中,由于Bird和Cat之间无继承关系,Bird对象无法转换成Cat对象
*/
//Cat y = (Cat) a6;
//y.catchMouse(); ClassCastException
}
}
Animal类
pu blic class Animal {
//重写是方法的重写,和属性无关
public void move(){
System.out.println("动物在奔跑");
}
}
Cat类
public class Cat extends Animal {
public void move(){
System.out.println("猫在跑");
}
public void catchMouse(){
System.out.println("猫在抓老鼠");
}
}
Bird类
public class Bird extends Animal {
//重写父类的move()方法
public void move(){
System.out.println("鸟儿在飞翔");
}
//也有自己特有的方法
public void sing(){
System.out.println("鸟儿在歌唱");
}
}
结果:
猫在抓老鼠