java - 在这种情况下选角如何进行?

标签 java

假设我有两个类。

public class example1 {

    private int a;
    private String b;

    public example1(int a, String b) {
        this.a = a;
        this.b = b;
    }

    public int getA() {
        return a;
    }
    public String getB() {
        return b;
    }
} 


public class example2 extends example1 {

    public example2(int a, String b) {
        super(a, b);
    }

    @Override
    public int getA() {
        return 10;
    }
}

现在,如果我继续将 example2 转换为示例 1。

example1 a = (example1) new example2(5, "Hi");

a.getA() 将返回什么?

作为进一步的问题,如果 example2 看起来像这样..

public class example2 extends example1 {

    public example2(int a, String b) {
        super(a, b);
    }
    @Override
    public int getA() {
        return getAModified();
    }
    public int getAModified() {
        return 10;
    }
}

a.getA() 会返回什么?这里发生了什么,更重要的是为什么会发生?

最佳答案

What would a.getA() return?

将为您提供 example2 的结果,因为您使用 example2实例化

What happens here

example1 a = (example1) new example2(5, "Hi");

。 您正在创建一个类型为 example1 且具有实现 example2 的实例。并转换为 example1

转换显示使用一种类型的对象来代替另一种类型。就是这样。它不会神奇地将实例化对象转换为强制转换。

关于java - 在这种情况下选角如何进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32177784/

相关文章:

java - 将数字插入有序arrayList

java - Storm bolt 如何从不同的喷口或其他 bolt 接收多种类型的元组?

java - getHibernateTemplate().find() 中的 SQL 注入(inject)

java - 填充内存数据网格 Hazelcast 的最快方法

java - 正确设置 JAVA_HOME 后 Cmake 找不到 JNI

java - Nodelist.item 返回 null

Java - 使用 ActionListener 调用 JasperReport

java - 为什么我的 TextView 不会在 android 中更新/重置?

java - 使用 SSH 隧道在运行 Java 应用程序的两个节点之间进行通信

java - 使用 Play Framework 代替 Tomcat 的初始上下文