请教面向对象基础问题:能否把父类对象直接转为子类对象?
nt941 2003-08-24 04:30:52 比如有A、B两个类,它们几乎完全相同,只有一个方法(比如method2)的定义B与A不同,于是让B继承A,并在B中重载method2。
假设后面的程序中得到了一个A的对象,可是我想让这个对象的method2方法表现出B的特性,于是我想把这个A的对象转变成B的对象,我想到了用强制类型转换的方法,可是试验失败了,请高手告诉我到底应该怎么转。
另外,继承的时候子类必须定义构造函数,是吗?我不定义的时候jbuilder就提醒我错误。
请高手指教,谢谢!!!
例:
假设两个类的定义如下:
class A {
public A(int a,int b) {
.........
}
public method1() {
.........
}
public method2() { //该方法的定义是A和B类唯一的不同
.........
}
}
class B extends A { //B是A的子类
public B(int a,int b) { //这个构造函数非写不可,是吗?
super(a,b);
}
public method2() { //重载父类的方法
......... //重新定义
}
}
假如后面的操作中从一Vector中取出了一个A的对象a,可是我希望a.method2()进行B类中定义的操作,于是我想进行如下的“强制类型转换”:
B b = (B)Vector.elementAt(1); //不能直接这么转吗?
可是编译的时候出现“ClassCastException”错误。
我的写法问题在哪里?请高手指教。
谢谢!