java - 类/对象转换

标签 java class classcastexception

我收到以下代码的异常。

class A {
    void foo() {
        System.out.println("Running foo()");
    }
}

class B extends A {
    void foo() {
        System.out.println("Overidden foo()");
    }
}

public class Casting {
    public static void main(String[] args) {
        A obj = new B();
        obj.foo();

        // B ref = (B) obj;
        // ref.foo();

        B ref = (B) new A();
        ref.foo();
    }
}

但是如果我运行

B ref = (B) obj;
ref.foo();

而不是

B ref = (B) new A();
ref.foo();

它工作正常。

谁能解释一下这里发生了什么?

最佳答案

objB 的实例,因为您使用类 B 的构造函数创建了它。这就是为什么 B ref = (B) obj; 工作正常的原因。

B ref = (B) new A(); 中,您只需转换使用 A 的构造函数创建的 A 类型的对象> (这是父类)到子类类型,这将导致 java.lang.ClassCastException。相反的转换也可以,即

A ref = (A) new B();
ref.disp();

在这种情况下,您可以将子类的实例转换为其父类,这很好,因为 B 类型的对象也是 A 的实例。

关于java - 类/对象转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24386325/

相关文章:

Java/泛型/ClassCastException

java - Java中的优先级队列

java - 为什么Integer.MIN_VALUE是-2^32而Integer.MAX_VALUE是2^31-1?

java - 使用并解析 request.getParameter 中的 Double ("price");

java - 不是语句错误,类型非法开始

delphi - 无法释放接口(interface)实现的类

class - 弗雷格类(class)如何运作?

c++ - 在另一个类中使用一个类对象

java - HttpsURLConnection.setDefaultHostnameVerifier 范围

Java,从文件中读取x、y、z坐标