从未使用子类继承的字段



知道类的某些字段永远不会被使用,我能从类继承吗?

假设我有一个Parent类及其子类Child:

public class Parent {
private String a;
private String b;
private String c;
...
}
public class Child extends Parent {
private String d;
...
}

我是否可以从这样的类继承,因为我知道在我的Child类中我只会使用字段";a"b"d";以及字段";c";永远不会被使用?

附言:并没有问编译器是否会抱怨。要求更好的设计实践。如果这是一种不好的做法,那么如何解决呢?

你问错了问题。可能有问题,也可能没有问题,但关注类中包含的数据是错误的。你必须关注他们的行为。

在她的主题演讲中;数据抽象和层次结构";Barbara Liskov介绍了通常被称为Liskov替代原则的内容;一种行为亚型概念;Liskov和Jeannette Wing。其思想是,如果一个类型可以在不影响其正确性的情况下在程序中的任何地方替换超类型,那么该类型就是另一个类型的子类型;也就是说,不破坏它。

如果程序中的所有Parent实例都替换为Child实例,会发生什么情况?孩子能做父母做的每件事吗?它支持相同的操作吗?它会产生同样的结果吗?

如果答案是肯定的,那么ChildParent的子类型。如果答案是否定的,那么它不是,也不应该是它的子类。字段c是否相关完全取决于它的使用方式。

如果您的Parent类允许扩展,而Child类不需要其Parent提供的所有信息,则您的Parent-class可能做得太多,可以将其分为不同的类

在进行重构之后,您可以扩展更适合您想要的行为的类。

下面是一个分离Parent类的示例。

class AB {
Object a;
Object b;
}
class ABC extends AB {
Object c;
}
class ABD extends AB {
Object d;
}

继承对于代码重用来说是一个很差的工具,所以如果这些类没有共享行为,您可以考虑组合。

class AB {
Object a;
Object b;
}
class ABC {
AB ab;
Object c;
}
class ABD {
AB ab;
Object d;
}

最新更新