java - classCastException 请帮助我了解真正的概念

标签 java

当子类的对象被赋值给父类(super class)的变量时,为什么只有那些成员 由父类(super class)定义的可访问

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() 之后;产生错误,据我所知上面代码中的a & b代表 引用 A 类和 B 类对象的内存分配,然后为什么代码无法访问 a.j 和 a.bdsip();在上面的代码中。

最佳答案

why only those members are accessible which are defined by the superclass

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

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

所以最终的结果是—— 在运行时,唯一保证可以使用父类(super class)引用访问的成员是在父类(super class)中定义的成员。

关于java - classCastException 请帮助我了解真正的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22217211/

相关文章:

java - 使用自定义类在 HashMap 上调用 containsKey

java - Map 和 Hashmap 有区别吗?

java - 为@ElementCollection Map 做更新而不是删除/插入

java - EJB 模块中的 XML-RPC 服务器

java - 为什么我的 updateAppWidget 方法不对所有操作使用react?

java - JMS 消息选择器实现

java - 一大堆 Material 设计错误

java - ZK日期框无法更改小时值

java - Java 中的 Upcast 差异

java - randomWalk.java 我缺少什么(初学者)