程序如下:
class A
{
void func1()
{
System.out.println("A func1 is calling");
}
}
class B extends A
{
void func1()
{
System.out.println("B fun1 is calling");
}
}
class c
{
public static void main(String[] args)
{
A a=new A();
B b=(B)a;
b.func1();
}
}
编译能够通过,但执行会出错。主要是那个类的强制转换。是不是不应该这么用?假如是的话那应该怎么使用?
谢谢......

解决方案 »

  1.   

    这样用没问题
    你的C类写错了
    main方法必须在public类中
      

  2.   

    把c类定义成 public class C
      

  3.   


    class A 

      void func1() 
      { 
        System.out.println("A func1 is calling"); 
      } 
    } class B extends A 

       void func1() 
       { 
         System.out.println("B fun1 is calling"); 
       } 
    } public class c 

       public static void main(String[] args) 
       { 
        A a=new B(); 
        a.func1();
        //B b=(B)a; 
        //b.func1(); 
       } 
    }
      

  4.   

    按二三楼的兄台修改还是无法执行:
    Exception in thread "main" java.lang.ClassCastException:A cannot be cast to B at c.main(c.java:20)五楼兄台那么改是可以啦
    不过那个 A a=new B(); 应该是把B类对象赋给了a吧?  它跟B b=(B)a;这个强制转换有关系吗?
    是不是要把父类强制转换成子类必须得先把子类对象赋给父类啊??
    晕死小弟啦......
      

  5.   

    我试过,没问题啊打印两句B fun1 is calling
      

  6.   

    文件名c.java
    类public class c
      

  7.   


    这种说法是错误的
    如果有main方法,文件名必须为类名.java
    如果有public类,文件名必须为public类类名.java(一个.java源文件有且只能有一个public类)
      

  8.   

    强制类型转换只能向上转型,也就是B能强制转换为A,而A不能强制转换为B。子类可以转换为超类,超类是不能转换为子类的。
    现在 A a = new A();说明创建的对象是A,A是B的超类,不能向B转换。
    我想你的意图可能是:B b = new B();
    A a = (A)b;
    a.func1();用来理解多态的。