问题描述
关于内层阶级,我有两个问题。
第一个是关于扩展和覆盖子类中内部类的方法和属性的。
假设我有一个带有包含派生属性的内部类的超类。
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?
第二个问题是关于序列化。 外部类的对象必须是可序列化的,而内部类的相应对象则不必是可序列化的,因为它们的所有属性都是从外部对象的属性派生的。如何实现此目的?
1楼
首先,您会误解内部类的概念。
您的ASub.Inner
类与ASuper.Inner
根本无关。
您无法访问其字段或其他内容。
实际上内部类是非常简单的事情。 它与常规类相同,但有两个例外:
- 它可以访问外部类的实例字段(因为它具有对外部类实例的隐藏引用)
-
即使将外部类的字段和方法标记为
private
也可以看到它们
关于您以后的问题。
必须将类标记为可Serializable
以备序列化。
内部类也不例外。
如果您的内部类可序列化,但其外部类必须注意的一件事也必须是因为内部到外部的隐藏引用。