当前位置: 首页 > 面试题库 >

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

陆卓
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();

问题答案:

强制转换完全不会改变基础对象-只是向编译器发送一条消息,可以将A视为B

也不必将if 强制A转换为Bif A extends B,即不需要将子类型强制转换为其超类型;如果是从超类型到子类型的,则只需要强制类型转换



 类似资料:
  • 请考虑以下类: 如果我要创建的实例,将其转换为对象,然后将其转换回,那么原始的对象是否会丢失其成员变量?例如:

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

  • 译者注: 原书这里只有两个链接: Recovering Lost Commits Blog Post,  Recovering Corrupted Blobs by Linus 我根据第一个链接,整理了一篇博文,并把它做为原书补充。 在玩git的过程中,常有失误的时候,有时把需要的东东给删了。 不过没有关系,git给了我们一层安全网,让们能有机会把失去的东东给找回来。 Let's go! 准备 我

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

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

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