扩展基础 class 的 class 是否可以扩展为仅基于扩展?

Can a class that extends a base class be extended to be based only on an extension?

我知道标题很乱,但我想不出书怎么问。我的问题是:我有一个抽象 class 正在扩展一个库基础 class。该依赖库 class 也有子 classes。然后我从摘要 class 中得到了一系列子 classes。问题是我的一个子 classes 要求摘要基于库子 classes 之一,而所有其他子 classes 只需要原始基础 class.

举个例子,假设我有一个图书馆有 class 个人。图书馆还有几个子 classes CHILD、YOUTH、MIDDLE_AGE 和 ELDERLY,每个都有自己的 attributes/methods。在我的代码中,我有一个扩展 PERSON 的抽象 class EMPLOYEE。它有几个子 classes NEW_HIRE、LINE_WORKER、MANAGER 和 RETIRING。大多数简单地使用 PERSON class 方法,但是 RETIRING sub class 仅在 PERSON 类型实际上是 ELDERLY 时才有效(它需要 class 中的某些方法)。该库是不可变的,因此我无法对其进行更改。

另一个示例是基于 collection 类型(例如 Set)的代码,但具有特定的 sub-class 要求集合为 TreeSet(例如,它需要 ceiling()功能)。

有没有办法指定这个?

如果我理解你的问题,参考你的人物示例,人物 class 似乎在两个方向上扩展,年龄和工作。 承认Age方向不能触及因为在库中,涉及Work方向的继承关系是有问题的。 所以,如果你是 a,我会使用 composition

The library also has several sub classes CHILD, YOUTH, MIDDLE_AGE and ELDERLY, each with their own attributes/methods.

句子开启两个场景:

  1. Employee 需要在 Person 抽象中声明的方法 class
  2. Employee 需要在 Person subclasses
  3. 中声明的方法

场景1最简单:Employee拥有对Person对象的引用,并通过转发调用Person的方法。

public abstract class Employee{
    private Person person;
    //... 

    Employee(Person p){
       this.person=p;
    }

    public getName(){      // basic example
       person.getName();
    }

场景 2(在我看来就是你的情况)紧随前一个,但有点复杂,因为它需要应用于每个需要在 [=30= 中声明的方法的 "Work subclass" ]. 着眼于退休情况,这种方法要求退休对象直接拥有对 Enderly 的引用。

public class Retiring extends Employee{
     private Enderly enderly;

     Retiring( Enderly e){
       this.enderly=e;
     }

     public getBenefits(){
         enderly.getMoney();
     }