java - 对象如何取消标记接口(interface)的标记?

标签 java oop interface

class A implements Serializable{

}


class B extends A{
    //this also inherits the marker 

}

那么有没有办法取消/取消标记B中的标记?

示例:如果有两个扩展A的类,分别名为BC。但其中只有 C 想要可序列化,而 B 则不然。

最佳答案

这不仅仅是 Java 缺少对此的支持:这样的功能将完全破坏其 OOP 基础。类型多态性意味着人们可以在子类型上应用里氏替换原则:你的“特征”会使其不适用。

每个子类型都受到它所扩展的类型的契约的严格约束:在每个引用父类(super class)型的地方,都必须能够出现子类型的实例。因此,如果父类(super class)型是可序列化的,我们就不能允许任何子类型不可序列化。

从不同的角度回答,如果您需要不可序列化类型 B 中可序列化类型 A 的功能,那么您的设计应基于组合而不是继承:让 B 包含 A 的适当实例。

关于java - 对象如何取消标记接口(interface)的标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13763093/

相关文章:

java - 如何使图像沿 x 轴反弹?

javascript - 复杂数据结构的 ReactJS 最佳实践

pdo 的 PHP oop 错误 - 调用非对象上的成员函数 prepare()

c# - 如何在C#接口(interface)中实现泛型?

java - 无法对非静态类型 E 进行静态引用

c# - 接口(interface)疑惑问题

java - REST Web服务不接收Android HttpPost参数

java - Eclipse + Egit - 将新的 Java 项目添加到远程存储库

java - java中的并发双向映射

ruby - 如何访问ruby中的幽灵父类?