我有两个关于内部类的问题。第一个是关于扩展和重写子类中内部类的方法和属性。
假设我有一个父类(super class),其内部类包含派生属性。
class ASuper implements Serializable {
// Attributes, methods
int a;
int b;
class Inner {
// Derived attributes, methods
int c;
int d;
public calculate() {
c = a + b;
d = a * b;
}
}
}
并且我想以这样的方式对 ASuper 进行子类化,即子类的内部类中的某些属性被赋予新值,有些属性是相同的。
class ASub extends ASuper {
int e;
class Inner {
int f;
public calculate() {
// int c = same as in the super class
f = a^b - e;
}
}
}
我真的不明白该怎么做。我是否必须覆盖 ASub.Inner.calculate() 中 int c 的定义,或者我可以引用 super 吗?
第二个问题是关于序列化的。外部类的对象必须是可序列化的,但内部类的相应对象不需要是可序列化的,因为它们的所有属性都派生自外部对象的属性。我该如何实现这一点?
最佳答案
首先,您误解了内部类的概念。
您的 ASub.Inner
类与 ASuper.Inner
完全无关。
你无法访问它的字段什么的。
事实上内部类是非常简单的事情。它与常规类(class)相同,但有两个异常(exception):
- 它可以访问外部类的实例字段(因为它隐藏了对外部类实例的引用)
- 外部类的字段和方法对其可见,即使它们标记为
私有(private)
关于你后面的问题。类必须标记为 Serialized
以防您要序列化它。内部类也不异常(exception)。只有一件事需要注意,如果您的内部类是可序列化的,那么它的外部类也必须是可序列化的,因为内部到外部的隐藏引用。
关于java - 使用内部类进行子类化,仅序列化外部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31675379/