public class DuoTaiDemo {
/**
* 多态:某一类事物存在多种形态。
* @param args
*/
public static void main(String[] args) {
// Fu f = new Fu();//这个是定义一个父类的对象,而并没有体现出多态,这个只能调用父类的方法
//
// Zi z = (Zi) f;//这个的f是父类的对象,它只具有父类的成员方法和成员变量,无法将它转化为子类来使用
// //因此会有ClassCastException
//下面这样写就ok啦 同时也体现出多态的特点
//成员方法 编译看左边,运行看右边
Fu f = new Zi();//将子类的特有方法隐藏 没有办法调用
Zi z = (Zi)f;//这样就可以进行强制转换 来调用子类的特有方法啦!!!
z.show();
}
}
class Fu {
public void show() {
System.out.println("Hello world!");
}
}
class Zi extends Fu {
public void show() {
System.out.println("Hello friends!");
}
}
ClassCastException是JVM在检测到两个类型间转换不兼容时引发的运行时异常。此类错误通常会终止用户请求。在执行任何子系统的应用程序代码时都有可能发生ClassCastException异常。通过转换,可以指示Java编译器将给定类型的变量作为另一种变量来处理。对基础类型和用户定义类型都可以转换。Java语言规范定义了允许的转换,其中大多数可在编译时进行验证。不过,某些转换还需要运行时验证。如果在此运行时验证过程中检测到不兼容,JVM就会引发ClassCastException异常。
当应用程序代码尝试将某一对象转换为某一子类时,如果该对象并非该子类的实例,JVM就会抛出ClassCastException异常。 就是你写的这一句Zi z =(Zi)f;改成这样就对了Zi z =new Zi();