当前位置: 首页 > 编程笔记 >

当我们尝试覆盖Java中超类的最终方法时,会发生什么?

解念
2023-03-14
本文向大家介绍当我们尝试覆盖Java中超类的最终方法时,会发生什么?,包括了当我们尝试覆盖Java中超类的最终方法时,会发生什么?的使用技巧和注意事项,需要的朋友参考一下

子类不能重写 在超类中声明为final的 任何方法 。如果我们尝试覆盖超类的最终方法,则会在Java中收到错误消息

实现方法覆盖的规则

  • 方法声明应与要重写的方法相同。

  • 在尝试覆盖之前,该类(子类)应扩展另一个类(超类)。

  • 子类永远不能覆盖超类的最终方法。

示例

class Car {
   public void brake() {
      System.out.println("brake() method of Car");
   }
   public final void accelerate() {
      System.out.println("accelerate() method of Car");
   }
}
public class BenzCar extends Car {
   public static void main(String[] args) {
      BenzCar benz = new BenzCar();
      benz.accelerate();
      benz.brake();
   }
   public void accelerate() {
      System.out.println("accelerate() method of Benz Car");
   }
}

在上面的例子,如果我们试图重写最后一个方法(加速()方法) 中的超类。编译器将抛出错误。因此,我们不会覆盖Java中超类的最终方法。

输出结果

overridden method is final
 类似资料:
  • 问题内容: 好的,我从很多地方和来源都听说过,每当我覆盖equals()方法时,我也需要覆盖hashCode()方法。但是请考虑以下代码 这里的输出为true,完全按照我想要的方式为false,我根本不关心重写hashCode()方法。这意味着hashCode()覆盖是一种选择,而不是每个人都说的强制性选择。 我想要第二次确认。 问题答案: 它对您有用,因为您的代码未使用任何需要API的功能(Ha

  • 我试图理解为什么我们不能覆盖静态和最终方法。我不明白背后的目的。

  • 问题内容: 我知道我们无法覆盖Java中的静态方法,但是有人可以解释以下代码吗? 如何在类中重写方法? 问题答案: 您在这里没有覆盖任何内容。要亲自查看,请尝试在类中添加注解,否则Java会引发错误。 你刚才定义在类中的函数称为,这是不同的(毫无关系)从功能类。 但是因为与父类中的函数具有相同的名称,所以它会 隐藏 [如Eng所指出。Fouad]。在运行时,编译器使用声明的引用的实际类来确定要运行

  • 问题内容: 在UIViewController中,此代码: 给出错误 我正在使用Xcode 8 beta 4,且iOS部署目标是9.0,并且在 如何将上面的代码转换为Swift 3? 问题答案: 像这样: …还有其余的。 一般模式 现在,许多Cocoa方法都是属性,因此您可以将它们实现为重写计算变量。因此,从种子3(或更早)移动到种子4的模式是: 更改为 删除 更改为 之所以可行,是因为计算的变量

  • 问题内容: 我更新到Xcode 8 beta 5,现在在从UIView继承的类上收到以下错误: 有解决方法吗? 问题答案: 请检查最新参考。(您只需在Apple开发者网站的搜索栏中输入“ intrinsicContentSize”,就可以轻松找到它。) 宣言 已成为计算属性,因此您需要以这种方式覆盖它: 或者简单地:

  • 问题内容: 假设我创建了一个对象,该对象具有ID,firstName,lastName和email,用于实例变量和相应的setter / getter方法。如何,如果我不重写计算中时,它存储在集合对象的对象? 问题答案: 如果不重写hashcode(),则集合将使用Object类中的默认实现。即使根据equals()方法它们相等,此实现也会为不同的对象提供不同的值。 一些集合(例如HashSet,