派生 class 不需要某些父方法或属性

derived class not needing some of the parent methods or attributes

派生 class 不需要其父 class 的某些方法或属性是否可能且符合逻辑?

例如,

public class FinishedCourse extends Course{
  ...
}

FinishedCourse class 派生自 Course class,但 不需要 Course class[ 的某些方法或属性=12=]

这既不可能也不符合逻辑。

可能:否。创建子class时,它会继承父[=]的所有public(和受保护)属性50=]。 (它也继承了私有位,但它不能访问它们。)虽然你可以用抛出异常的东西覆盖一些方法来指示它不再相关(IllegalStateException),subclass 将仍然有方法,在某些圈子里,这可能会被主观地视为糟糕的设计。 (在其他圈子里,主观上可能被认为是务实的。)

逻辑:不。subclass与其superclass有"is a"关系。您可以在任何需要 Course 的地方使用 FinishedCourse,实际上使用该实例的代码可能不知道(或不关心)它正在处理 subclass 而不是 Course.

相反,有几个选项:

  1. 你可以有一个基础 class 只实现 FinishedCourse 需要的东西(也许 BaseCourse),并且有 FinishedCourseCourse 都 subclass 它。完成课程后,创建一个 FinishedCourse 实例来替换 Course 实例。

  2. 有一个 Course 只包含课程信息,另外有一个 CourseHandler 知道如何处理正在进行的课程的对象。

  3. 可能是其他几种解决方法中的任何一种。 :-)

Is it possible and logical that a derived class does not need some of the methods or attributes of its parent class?

如果在 parent class 中定义了一个方法,通常它的子 class 应该有一些用例来使用它。

让 class 继承一个永远不会被使用的方法通常是一个设计问题,因为 API 不符合它的需要。
这使得class意图不明确且容易出错。

继承使用不当可能会出现这种设计
例如,当我们使用继承来制作继承方法而不是制作继承 class/concept.

现在,parent class 的方法被 subclass 覆盖是完全有效的,而且这个被覆盖的方法根本不依赖于 super method(parentclass的方法).

我不太清楚你想用这个做什么。但我认为这会为您解决问题。

public class Course{
  private String course = "CS101";
}


public class FinishedCourse extends Course{

  public void displayCourse(){

    System.out.println(super.course); //compilation error. 
    //You cannot access private variables even if it is in direct parent class
  }
}