当前位置: 首页 > 知识库问答 >
问题:

重载重写方法是我重载父方法还是子类方法

常波
2023-03-14

重载子类中重写的方法,我是重载父方法还是重载子类方法?

我大体上理解什么是超载和超驰。

重载-同一方法在同一个类中有不同的参数和可能的返回类型。

重写-子类中的方法签名与父类中的方法签名相同,但实现不同。

class A {
    public void a() {
        System.out.println("A.a");
    }
}

class B extends A {
    public void a() {
        super.a();
        System.out.println("B.a");
    }

    public void a(int x) {

    }
}

方法B.a(INTX)是重载a.a还是重载B.a?

共有3个答案

贺福
2023-03-14

b. a(int x)正在重载类B. a()的方法

凌驾规则

规则#1:只能重写继承的方法。

规则#2:不能重写Final和static方法。

规则#3:重写方法必须具有相同的参数列表。

规则4:重写方法必须具有相同的返回类型(或子类型)。

规则#5:重写方法不能有更严格的访问修饰符。

卜弘文
2023-03-14

方法B.a(int x)重载B.a(),因为方法重载解析发生在编译时,并且取决于调用方法的变量的编译时类型。

另一方面,执行哪个重写方法的决定发生在运行时,并且取决于调用该方法的实例的运行时类型。

您可以通过尝试以下代码来看到这一点,因为类A没有签名a(int x)的方法:

A b = new B ();
b.a(4);
阚砚文
2023-03-14

您重写了继承的内容,因此B.a()重写了a.a()。覆盖意味着重新定义。

重载是指类具有多个相同方法名的定义(每个定义具有不同的参数类型)。在B中,名称a重载。有B.a()和B.a(intx)。

有些定义可能是继承的。因此,如果删除B.a(),类B仍然会有一个方法a(),因为它从a继承而来,并且方法名a仍然会在B中重载。

 类似资料:
  • Java中方法重载和重写的区别?不能给出正确答案。下面是java代码。 问题:这个方法是重载、重写还是没有?

  • 我们有两个班级。 我试图弄清楚函数 是否会被视为或。我尝试使用关键字,它说该方法未被覆盖。但我想知道 关键字是否仅在父类中的函数被编写为函数时才有效,并且在上述情况下是否可以将该函数视为被覆盖。 另外,我想知道重写方法是否总是意味着后期绑定/运行时多态?

  • 主要内容:如何调用被重写的方法前面讲过在 Python 中,子类继承了父类,那么子类就拥有了父类所有的类属性和类方法。通常情况下,子类会在此基础上,扩展一些新的类属性和类方法。 但凡事都有例外,我们可能会遇到这样一种情况,即子类从父类继承得来的类方法中,大部分是适合子类使用的,但有个别的类方法,并不能直接照搬父类的,如果不对这部分类方法进行修改,子类对象无法使用。针对这种情况,我们就需要在子类中重复父类的方法。 举个例子,鸟通

  • 下面的例子属于哪个概念:方法重载还是方法重写???

  • 我正在编写一个带有对象的游戏,我想根据它的类使用不同的命令。我有一个超级类“项目”,一个子类“工具扩展项目”和“锤子扩展工具”。在项目超类(抽象)中,我有一个抽象方法“doCommand”,我在工具中覆盖了它。这很好用,我现在在工具中有一个有效的“doCommand”。但是当我想在 Hammer 中覆盖这个“doCommand”时,它只是使用工具的“doCommand”。 这来自调用方法的类的一部

  • Java 允许同一个类中定义多个同名方法,只要它们的形参列表不同即可。 如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,这种情况被称为方法重载(overload)。 例如,在 JDK 的 java.io.PrintStream 中定义了十多个同名的 println() 方法。 这些方法完成的功能类似,都是格式化输出。根据参数的不同来区分它们,以进行不同的格式化处理和输出。它们之