classCastException请帮我解决实际问题

时间:2014-03-06 06:52:04

标签: java

当子类的对象被分配给超类的变量时,为什么只有那些成员 是可访问的,由超类

定义
class A { 
    int i=10;
    void adsip() {
        System.out.println(i);
    }
}

class B extends A {
    int j=20;
    void bdsip() { 
        System.out.println(i+j);
    } 
}

class inherit4 { 
    public static void main(String[] x) { 
        A a=new A();
        B b=new B();
        System.out.println("b.i="+b.i+"b.j="+b.j);
        b.adsip();
        b.bdsip();
        a=b;
        System.out.println("a.i="+a.i);
        a.adsip();
    }
}

上面的代码工作正常 但是在添加a.j和a.bdisp()之后;如果我知道& b在上面的代码中表示 对A类和A类物体的记忆分配的参考B那么为什么代码无法访问a.j和a.bdsip();在上面的代码中。

3 个答案:

答案 0 :(得分:1)

ClassCastException - 抛出此异常表示代码已尝试将对象强制转换为不是实例的子类。

例如,以下代码生成ClassCastException:

Object x = new Integer(0);
System.out.println((String)x);

另请参阅此主题。 Can someone explain “ClassCastException” in Java?

答案 1 :(得分:1)

  
    

为什么只有那些由超类

定义的成员才可访问   

因为在运行时,超类引用可能指向子类层次结构中任何类的超类实例或实例。

超类有方法m1,但是子类有方法m1和m2。您想使用超类的引用访问m2。但是,如果在运行时引用指向超类的实例(没有m2),该怎么办?

所以最终的结果是 - 在运行时,唯一保证可以使用超类引用访问的成员是超类中定义的成员。

答案 2 :(得分:1)

在继承中,子可以访问父数据但反过来是不可能的。父无法访问子数据。所以这里是A类的对象,a不能访问B类的方法或数据。