【问题标题】:Can we make a overridden method as abstract method in Java?我们可以将覆盖的方法作为Java中的抽象方法吗?
【发布时间】:2023-04-08 17:09:02
【问题描述】:

如果我将父类的方法覆盖到子类,那么是否可以将这个子类覆盖的方法设为抽象?

【问题讨论】:

  • 你试过了吗?发生了什么。
  • 相关问题:stackoverflow.com/questions/32337498/…(但不能重复)
  • 我永远无法理解为什么人们会在 Internet 上询问他们可以在 30 秒内为自己测试的东西。

标签: java


【解决方案1】:

Java 语言规范 (§8.4.3.1) 声明如下:

“非抽象的实例方法可以被抽象方法覆盖。”

因此,您尝试做的事情是允许的。例如:

public class Parent {
   public void method() { }
}

public abstract class AbstractChild extends Parent {
   public abstract void method();   // This is permitted.
}

引用的文本取自 JLS 的 Java 8 版本,但据我所知,从 Java 1.0 开始的所有 Java 版本都是如此。

也允许抽象方法覆盖抽象方法。

Parent 是接口而不是类时,也允许这样做,即使method 在接口中有default 实现。

【讨论】:

  • 我见过这种覆盖用于强制 Object.toString() 覆盖(因为此方法必须返回当前对象的字符串表示形式,而不是父对象的字符串表示形式。)
  • 是的,我见过人们这样做。不是一个好主意,海事组织。 (而且它实际上并没有强制任何有用的东西:例如,考虑这个实现:ChildClass.toString() { return super.toString(); } ...)
  • @StephenC public abstract boolean equals(); & public abstract int hashCode(); 有一些语义用例。 (另见 java.lang.Record 正是这样做的目的是为这些方法提供完善的合同)
猜你喜欢
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多