当前位置: 代码迷 >> java >> 内部类的子类化,仅序列化外部类
  详细解决方案

内部类的子类化,仅序列化外部类

热度:81   发布时间:2023-08-04 09:32:52.0

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

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根本无关。 您无法访问其字段或其他内容。

实际上内部类是非常简单的事情。 它与常规类相同,但有两个例外:

  • 它可以访问外部类的实例字段(因为它具有对外部类实例的隐藏引用)
  • 即使将外部类的字段和方法标记为private也可以看到它们

关于您以后的问题。 必须将类标记为可Serializable以备序列化。 内部类也不例外。 如果您的内部类可序列化,但其外部类必须注意的一件事也必须是因为内部到外部的隐藏引用。

  相关解决方案