昨天去华为面试了一下过了四关,可惜最后一关跨了,虽然有点遗憾!
有一道题目是这样的:
package test;
class Base{}
class sub1 extends Base{}
class sub2 extends Base{}
public class Test3 {    public static void main(String[] args) {
        Base b = new Base();
        sub1 s = (sub1)b;
        
        
    }
}
编译出现的错误:java.lang.ClassCastException
at test.Test3.main(Test3.java:22)
Exception in thread "main" 为何?

解决方案 »

  1.   

    这是因为你在内存里面分配的是基类对象sub1 s = (sub1)b就是强制向下转型~~一定要出这个异常的public static void main(String[] args) {
            Base b = new sub1();
            sub1 s = (sub1)b;
            
            
        }这样改就没有问题了
      

  2.   

    这个样就可以了
    package test;
    class Base{}
    class sub1 extends Base{}
    class sub2 extends Base{}
    public class Test3 {    public static void main(String[] args) {
            Base b = new Base();
            b=null;
            sub1 s = (sub1)b;
            
            
        }
    }
      

  3.   

    Base b = new Base();
    b=null;
    sub1 s = (sub1)b;这样会没有问题???
    问题大了去了
      

  4.   

    呵呵,这样就第四关了~ 晕~
    这是个典型的 cast down 的错误~
      

  5.   

    eprint自定义打印是一个页面套打工具.它直接在IE浏览器中可视化的设计各种复杂的打印模版,
    能够解决在IE浏览器中打印各种复杂的中国式报表及票据。详见: http://218.30.103.110:8080/eprint/index.htm
    方成eform自定义表单平台,纯BS结构.100%开放源码.可以在 http://218.30.103.110:8080/eform/index.html 在线试用.
      

  6.   

    回复人: hlnccc(亚斯托雷斯) ( ) 信誉:100  2005-08-15 10:18:00  得分: 0  
     
     
       去华为搞java不合适  
     
    怎么说呀?
      

  7.   

    kao,我感觉,大家答题的不多,来吹牛比的到不少,这个基础那个简单的,要是觉得简单你就别看,不回答,还在那吹牛比,鄙视,!!!!!!!!!!!!!!!!!!就算你厉害,你就该答 一下,如果懒的话就别看!!!!!!!!!!!!!!!!!!
      

  8.   

    这是上朔和下朔的问题,而且编译肯定通的过,只是在运行时候会报错.<Think in java>里有详细介绍的.题目都出的不对,华为也太逊色了吧?
      

  9.   

    晕,Java语法云:父类对象可以付给子类引用(Cast后),但是运行时就会出错了。
      

  10.   

    A extends B
    A一定是B,而B不一定是A
    华为居然出这种题???
      

  11.   

    编译不会出错。什么烂题目!class 名字首字母要大写都不知道?
      

  12.   

    ClassCastException是超级简单的类型转换异常嘛
      

  13.   

    package test;class Base{}
    class sub1 extends Base{}
    class sub2 extends Base{}public class Test3
     { public static void main(String args[])
        { 
      Base b = new sub1();
      sub1 s = (sub1)b; }  }这样我运行的时候还是有问题,要把package语去掉才行。不然
    Exception in thread "main" java.lang.NoClassDefFoundError: Test3 (wrong name: te
    st/Test3)
            at java.lang.ClassLoader.defineClass1(Native Method)
            at java.lang.ClassLoader.defineClass(Unknown Source)
            at java.security.SecureClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.access$100(Unknown Source)
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    为什么?
      

  14.   

    同意smlovetp的说法,因为将一个父类付给一个子类编译就会出错.
      

  15.   

    java.lang.ClassCastException
    at test.Test3.main(Test3.java:22)
    Exception in thread "main" 这是异常,当然不应该是编译错误
    应该楼主描述有问题
      

  16.   

    去华为搞JAVA。要命了
    还不如去无锡永中搞Office
      

  17.   

    应该不是这样的错吧,是那个public 的错吧.错误如下:Text3.java:4: class Test3 is public, should be declared in a file named Test3.ja
    va
    public class Test3     ^
    1 error
      

  18.   

    大家都说的很正确,就一个问题,转型的问题,A extends B
    A一定是B,而B不一定是A,如果 Base b = new Base();sub1 s = (sub1)b;这句反过来就可以了,呵呵
      

  19.   

    变成Sub1 s = new Sub1(); Base b = (Sub1)s;就对了
      

  20.   

    不是编译错误,,是Exception.
    结帖!
      

  21.   

    这个问题都会垮?
    是楼主不细心吧。Base b = new Base();
    sub1 s = (sub1)b;如果这样都能成功,那就跳楼了