【发布时间】:2017-08-03 06:10:07
【问题描述】:
我有两节课
基类
public class BaseClass
{
public int baseClassVariable = 10;
//like this 10 to 20 variables
}
子类
public class SubClass extends BaseClass
{
public int subClassVariable = 20;
//like this 30 to 40 variables
}
还有一个主类:
public class TestMain
{
public static void main(String[] args)
{
Map<String, BaseClass> myData = new HashMap<String, BaseClass>();
SubClass mydata = new SubClass();
myData.put("Test", mydata);
for (Entry<String, BaseClass> data : myData.entrySet())
{
System.out.println(data.getKey() + "-" + data.getValue());
}
}
}
如您所见,在我的主课中,我有String 的Map 和BaseClass。我的期望是减少内存占用,所以我只需要在内存中保留 BaseClass 变量,这些变量是应用程序中经常使用的数据,但应用程序中需要子类进行一些计算,因此在应用程序中将创建子类。
现在我的问题是归档我的期望的最佳方式(超类和子类)(现在由于继承而无法按预期工作)还是我需要使用不同的机制来实现它。
我的最终目标是在 map 中只保留 BaseClass 变量。
【问题讨论】:
-
这不会像你想象的那样节省内存。映射中的值仍然是
SubClass对象,即使映射中值的类型是BaseClass。如果您这样做,SubClass部分不会以某种方式被丢弃。 -
确实如此。强制转换不会更改对象的类型 - 如果您只想创建一个
BaseClass对象,您需要明确地执行此操作。 -
@Jesper 是的,即使在将 SubClass 转换为 BaseClass 之后,该类也不会被转换这是正确的,但是我如何才能实现这种类型的要求,还有其他方法吗?
-
如果您想保留
BaseClass字段并丢弃SubClass字段,那么继承可能不是您想要的模型。如果SubClass数据未绑定到与您的BaseClass数据相同的对象中,则很容易丢弃它。 -
@khelwood 但是我的应用程序需要来自 SubClass 和 BaseClass 的全部数据,所以只有我这样使用过,有没有其他方法可以做到这一点而不是拆分这两个类。?
标签: java oop inheritance polymorphism