当前位置: 首页 > 知识库问答 >
问题:

在父类之间来回转换后,子对象是否失去其唯一属性

李昱
2023-03-14

请考虑以下类:

public class Phone {
    private boolean has3g;

    public boolean has3g() {
        return has3g;
    }

    public void setHas3g(boolean newVal) {
        has3g = newVal;
    }
}

public class Blackberry extends Phone {
    private boolean hasKeyboard;

    public boolean hasKeyboard() {
        return hasKeyboard;
    }

    public void setHasKeyboard(boolean newVal) {
        hasKeyboard = newVal;
    }
}

如果我要创建blackberry的实例,将其转换为phone对象,然后将其转换回blackberry,那么原始的blackberry对象是否会丢失其成员变量?例如:

Blackbery blackbery = new Blackberry();
blackbery.setHasKeyboard(true);

Phone phone = (Phone)blackbery;

Blackberry blackberry2 = (Blackberry)phone;

// would blackberry2 still contain its original hasKeyboard value?
boolean hasKeyBoard = blackberry2.hasKeyboard();

共有1个答案

欧阳俊捷
2023-03-14

强制转换根本不会更改底层对象--它只是向编译器发出一条消息,说明它可以将a视为B

如果a扩展了B,也不需要将a强制转换为B,即不需要将子类型强制转换为它的超类型;只有从超类型转换为子类型时才需要转换

 类似资料:
  • 问题内容: 考虑以下类别: 如果我要创建的实例,则将其强制转换为对象,然后再强制转换为,原始对象会丢失其成员变量吗?例如: 问题答案: 强制转换完全不会改变基础对象-只是向编译器发送一条消息,可以将视为。 也不必将if 强制转换为if ,即不需要将子类型强制转换为其超类型;如果是从超类型到子类型的,则只需要强制类型转换

  • 问题内容: 类对象在JVM中是否保证是唯一的,它们是Singletons吗?即会 永远成立,是 当且仅当 其中a和b是类型? 问题答案: 每个类加载器可以有一个单例和/或类。 如果(除非a为)必须为true

  • 问题内容: 我正在玩Java的反射API,并尝试处理一些字段。现在,我要确定字段的类型。字符串很简单,只需执行即可。其他非派生类也是如此。但是,如何检查派生类?例如作为的子类。我无法找到任何或方法。我是否需要遍历所有人并自己找到超人? 问题答案: 您需要此方法: 一般情况下,(以上)应替换为并应替换为 从JavaDoc: 确定此对象表示的类或接口是否与指定参数表示的类或接口相同或超类或超接口。如果

  • 我理解超类/子类之间的关系以及强制转换是如何工作的。但是,我的问题是,如果知道中间有一个类,你能把一个超类转换成一个特定的子类吗?例如,如果我有一个动物类对象包含一个BigDog对象,我可以将该对象强制转换为Dog吗?如果BigDog中有Dog中不存在的方法怎么办? 简而言之,你当然可以说超类对象是子类对象,但为什么你可以反转呢? 转念一想, Java在调用方法时检查的是:引用(DOG)是否有引用

  • 问题内容: 我有2个类,分别称为超类和子类,我试图将子类对象转换为超类,但是当我想使用超类的子类对象时,它似乎不起作用。请帮忙解释。谢谢。这些是代码: 当我尝试使用子类的displaySub()时出现错误 问题答案: 超类不能知道子类方法。 这样考虑: 你有超一流的 你有两个子类,即:, 两个子类将具有相同的特征,例如 该超意识到这些,因为所有S能说话(即使它不知道此操作的确切机制) 一但可以做的

  • 我写了这个,但我不明白这是什么。