代码如下:
lesson04b.java
class A
{
public void func1()
{
System.out.println("A.func1");
}
public void func2()
{
System.out.println("A.func2");
func1();
}
}
class B extends A
{
public void func1()
{
System.out.println("B.func1");
}
public void func3()
{
System.out.println("B.func3");
}
}
class C
{
public static void main(String[] args)
{
System.out.println("强制类型转换A->B后的调用效果:");
A a = new A();
B b = (B)a;
b.func1();
}
}
编译javac lesson04b.java通过,
运行java C时出错:强制类型转换A->B后的调用效果:
Exception in thread "main" java.lang.ClassCastException: A
at C.main(test.java:31)请问,这段代码是否有误,应该怎样做才能使子类正常工作?
lesson04b.java
class A
{
public void func1()
{
System.out.println("A.func1");
}
public void func2()
{
System.out.println("A.func2");
func1();
}
}
class B extends A
{
public void func1()
{
System.out.println("B.func1");
}
public void func3()
{
System.out.println("B.func3");
}
}
class C
{
public static void main(String[] args)
{
System.out.println("强制类型转换A->B后的调用效果:");
A a = new A();
B b = (B)a;
b.func1();
}
}
编译javac lesson04b.java通过,
运行java C时出错:强制类型转换A->B后的调用效果:
Exception in thread "main" java.lang.ClassCastException: A
at C.main(test.java:31)请问,这段代码是否有误,应该怎样做才能使子类正常工作?
if(a instanceof B) b=(B)a;
你那样是没有用的,因为你的if语句块中的代码是没有被执行的。
Java中有没有明确说我记不清了。但是你最笨的办法就是你写两个类A、B(里面什么都不用实现),B继承A,然后把A的一个实例转换成B的一个实例,你看看行不行,如果不行就不可以。
class B extends A {} //子类
class C
{
//父类强制为子类,此处编译通过,但运行错误。
public static void main(String[] args)
{
A a = new A();
B b = (B)a;
}
}
错误仍是:
Exception in thread "main" java.lang.ClassCastException: A
at C.main(test.java:12)
道理明白了:在Java中根本不可能将父类强制转换为子类类型。谢谢imA(阿梁)