我有两个关于内部课程的问题。第一个是关于扩展和覆盖子类中内部类的方法和属性 假设我有一个包含派生属性的内部类的超类。
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?
第二个问题是关于序列化。外部类的对象必须是可序列化的,但内部类的相应对象不必是,因为它们的所有属性都是从外部对象的属性派生出来的。我怎样才能实现这一点?
答案 0 :(得分:3)
首先,你误解了内部阶级的想法。
您的ASub.Inner
课程与ASuper.Inner
完全无关。
您无法访问其字段或其他内容。
事实上,内部课很简单。它与普通类相同,但有两个例外:
private
关于你以后的问题。必须将类标记为Serializable
,以防您序列化它。内心阶级也不例外。只有一点需要注意,如果你的内部类是可序列化的,那么它的外部类必须也是因为内部到外部的隐藏引用。