class A implements Serializable{
}
class B extends A{
//this also inherits the marker
}
那么有没有办法取消/取消标记类B
中的标记?
示例:如果有两个扩展A
的类,分别名为B
和C
。但其中只有 C
想要可序列化,而 B
则不然。
最佳答案
这不仅仅是 Java 缺少对此的支持:这样的功能将完全破坏其 OOP 基础。类型多态性意味着人们可以在子类型上应用里氏替换原则:你的“特征”会使其不适用。
每个子类型都受到它所扩展的类型的契约的严格约束:在每个引用父类(super class)型的地方,都必须能够出现子类型的实例。因此,如果父类(super class)型是可序列化的,我们就不能允许任何子类型不可序列化。
从不同的角度回答,如果您需要不可序列化类型 B
中可序列化类型 A
的功能,那么您的设计应基于组合而不是继承:让 B
包含 A
的适当实例。
关于java - 对象如何取消标记接口(interface)的标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13763093/