所以这就是我在Java中注意到的:
如果我上课:
class IntStorage
{
public int i;
public void setInt(int i) { this.i = i; }
public int getInt() { return i; }
}
继承它,并存储其他数据:
class IntAndStringStorage : IntStorage
{
public String s;
public void setString(String s) { this.s = s; }
public String getString() { return s; }
}
我这样做:
IntAndStringStorage IandSstorage = new IntAndStringStorage();
IandSstorage.setString("Test");
IntStorage Istorage = (IntStorage)IandSstorage;
IntAndStorageStorage test = (IntAndStorageStorage)Istorage;
System.out.println(test.getString());
即使我将它转换为继承的类,它也完全有效。现在我假设信息仍然在对象内部,那么我可以完全将它转换为继承的类而不保留旧信息吗?我不希望在 int 存储类中遗留 String 存储。希望我的问题足够清楚!先谢谢!
答案 0 :(得分:13)
Casts 不更改Java中的对象(与C#不同,Java中的强制转换不能超载)。因此,转换只会更改对象显示的[编译时]类型 - 始终完全有效,无法将对象强制转换回原始类型。
要“减少”对象需要
此外,接口通常是一种更好的方式来暴露某些“视图”,而不是依赖于基类型。
答案 1 :(得分:2)
在Java中执行此操作的最佳方法是基于IntAndDataStorage实例int值创建新的IntStorage。
IntStorage intStorage = new IntStorage(intAndSstorage.getInt());
假设您将IntStorage(int)构造函数添加到IntStorage。没有字符串剩余。