转型
1.向上转型 : 子类自动转为父类
2.向下转型 : 把父类强制转换为子类
还是举一个动物的例子
向上自动转型
public class TestCasting {
public static void main(String[] args) {
//向上转型 子类自动转化为父类
Animal a = new Dog();
a.shout();//狗在汪汪汪
a.act();
//其实编译器认为a是Animal类的实例,所以实例a不能调用子类Dog中特有的方法
//但是,当运行时时候,系统就会知道a实际上是Dog类的实例,所以a.shout()方法调用的
//实际上是Dog类中重写的方法
}
}
class Animal{
public void shout(){
System.out.println("动物在叫");
}
}
class Dog extends Animal{
public void shout() { //子类重写父类方法
System.out.println("狗在汪汪汪");
}
public void act() { //子类特有特的方法
System.out.println("狗在看门");
}
}
强制向下转型
public class TestCasting {
public static void main(String[] args) {
Animal a = new Dog();//向上转型 子类自动转化为父类
Dog dog = (Dog)a;//现在父类强制转换为子类
dog.shout(); //狗在汪汪汪
dog.act(); //狗在看门
//现在编译器认为dog就是Dog类的实例,所以Dog类中特有的方法就可以被调用
}
}
class Animal{
public void shout(){
System.out.println("动物在叫");
}
}
class Dog extends Animal{
public void shout() { //子类重写父类方法
System.out.println("狗在汪汪汪");
}
public void act() { //子类特有特的方法
System.out.println("狗在看门");
}
}
还有一些特殊的强制转换
将狗强制向下转换为猫,虽然编译器不会报错,但是运行时会报出ClassCastException异常。
这样进行强制转换编译器直接报错。