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

标签 java inheritance serialization inner-classes

我有两个关于内部类的问题。第一个是关于扩展和重写子类中内部类的方法和属性。
假设我有一个父类(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/

相关文章:

java - 如何在 JUnit 测试中从 src/main/resources 相对位置读取文件?

java - 如何在 Spring 3.1 中从多个参数生成自定义键以进行缓存抽象?

C# 泛型类定义与 inerited 类语法错误

c# - XmlSerializer - 反射(reflect)类型时出错

java - 获取SerializationService,通过序列化进行克隆

PHP:序列化和反序列化包含转义字符的字符串

java - 有没有办法从异步方法绘制到 JPanel 上?

java - JAX-RS 中的 @DefaultValue 日期为 : now() and MAX

c++ - 在继承的类构造函数中使用隐藏成员

oop - 在 TypeScript 中扩展 React 组件