使用内部类进行子类化,仅序列化外部

时间:2015-07-28 11:46:13

标签: java inheritance serialization inner-classes

我有两个关于内部课程的问题。第一个是关于扩展和覆盖子类中内部类的方法和属性 假设我有一个包含派生属性的内部类的超类。

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 个答案:

答案 0 :(得分:3)

首先,你误解了内部阶级的想法。 您的ASub.Inner课程与ASuper.Inner完全无关。 您无法访问其字段或其他内容。

事实上,内部课很简单。它与普通类相同,但有两个例外:

  • 它可以访问外部类的实例字段(因为它隐藏了对外部类的实例的影响)
  • 外部类的字段和方法即使标记为private
  • 也可见

关于你以后的问题。必须将类标记为Serializable,以防您序列化它。内心阶级也不例外。只有一点需要注意,如果你的内部类是可序列化的,那么它的外部类必须也是因为内部到外部的隐藏引用。