有没有办法将Java对象"减少"为继承的类?

use*_*979 3 java inheritance class

所以这就是我在Java中注意到的:

如果我上课:

class IntStorage
{
    public int i;

    public void setInt(int i) { this.i = i; }
    public int getInt() { return i; }
}
Run Code Online (Sandbox Code Playgroud)

并继承它,并存储其他数据:

class IntAndStringStorage : IntStorage
{
    public String s;

    public void setString(String s) { this.s = s; }
    public String getString() { return s; }
}
Run Code Online (Sandbox Code Playgroud)

我这样做:

IntAndStringStorage IandSstorage = new IntAndStringStorage();
IandSstorage.setString("Test");
IntStorage Istorage = (IntStorage)IandSstorage;
IntAndStorageStorage test = (IntAndStorageStorage)Istorage;
System.out.println(test.getString());
Run Code Online (Sandbox Code Playgroud)

即使我将它转换为继承的类,它也完全有效.现在我假设信息仍然在对象内部,那么我可以完全将它转换为继承的类而不保留旧信息吗?我不想在我的int存储类中留下String存储.希望我的问题足够清楚!提前致谢!

use*_*674 13

转换不会更改Java中的对象(与C#不同,Java中的转换不能重载​​).因此,强制转换只会更改对象显示的[编译时]类型 - 将对象强制转换回原始类型始终是完全有效的.

要"减少"一个物体需要

  1. 创建一个信息较少的对象(可能是基本类型);
  2. 有一个可变对象抛出(即指定null /默认值)到各种"剪切"字段.

此外,接口通常是一种更好的方式来暴露某些"视图"而不是依赖于基类型.

  • +1一个非常好的综合答案.我期待更多你的答案(和你的名字;) (3认同)