作者: breeze 时间: 2013-5-6 21:08
Fu f = new Fu();
Zi z =(Zi)f;
父类型的对象时不能转换为子类型的对象, 如果是父类引用子类对象, 再强转为子类型, 是可以的
Fu f = new Zi();
Zi z = (Zi)f;作者: 337091921 时间: 2013-5-6 21:11
你忘了多态的条件了吗:一、要父类指向子类。你的是fu f=newfu(),要换为fu f=new zi()。
二、要有继承
三、重写父类的方法作者: 白磊 时间: 2013-5-6 22:02
ClassCastException是JVM在检测到两个类型间转换不兼容时引发的运行时异常。此类错误通常会终止用户请求。在执行任何子系统的应用程序代码时都有可能发生ClassCastException异常。通过转换,可以指示Java编译器将给定类型的变量作为另一种变量来处理。对基础类型和用户定义类型都可以转换。Java语言规范定义了允许的转换,其中大多数可在编译时进行验证。不过,某些转换还需要运行时验证。如果在此运行时验证过程中检测到不兼容,JVM就会引发ClassCastException异常。
当应用程序代码尝试将某一对象转换为某一子类时,如果该对象并非该子类的实例,JVM就会抛出ClassCastException异常。 就是你写的这一句Zi z =(Zi)f;改成这样就对了Zi z =new Zi();作者: HM张健 时间: 2013-5-6 22:21
冒个泡 子类不能强转为父类 第三行改为 Fu f = new Zi();作者: 施祖喜 时间: 2013-5-6 23:08
真心觉得LZ是概念还没理解透彻,多态三个条件,
1、父类引用指向子类对象;
2、要有覆盖操作,也就是重写;
3、需要存在继承或者实现关系;
第一个条件就是你没理解的地方作者: 兴朗ok 时间: 2013-5-7 10:09
package cn.zjx.DuoTai;
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!");
}
} 作者: 江大海 时间: 2013-5-7 14:41
可以转型的条件是父类的引用指向子类对象,而且多态中都是父类在做变化作者: 曹睿翔 时间: 2013-5-7 19:28