它是超载还是覆盖?

时间:2016-07-07 11:03:02

标签: java overloading override

我有一个代码而且我无法理解输出为什么" Radial Tire with long"。有人帮我理解这段代码吗?

class Tyre {
    public void front() throws RuntimeException {
        System.out.println("Tire");
    }

    public void front(long a) {
        System.out.println("Radial Tire with long");
    }
}

class TestSolution extends Tyre {
    public void front() {
        System.out.println("Radial Tire");
    }
    public void front(int a) throws RuntimeException {
        System.out.println("Radial Tire with int");
    }


public static void main(String... args) {
        Tyre t = new TestSolution();
        int a = 10;
        t.front(a);

}

}

5 个答案:

答案 0 :(得分:4)

front未在TestSolution中被重写重载

您可以将重载函数视为完全不同的函数,例如具有不同名称的函数。

因此t.front(a)会调用Tyre中的along隐式转换为byte[]

答案 1 :(得分:1)

所以如果我们选择定义

重载意味着具有相同名称但具有不同数量或参数顺序的方法。

覆盖意味着具有相同名称且具有相同参数数量的方法以及提及的规则here

因此,在您的情况下front方法在TyreTestSolution

类中都会重载 来自front()类的

方法Tyre在类TestSolution中被覆盖。

如果方法front(long a)front(int a)没有覆盖。

答案 2 :(得分:0)

main中没有压倒一切。

t的静态(编译时)类型为Tyre,因此,由于方法重载决策由实例的编译时类型决定,因此{{1}可供编译器选择的方法是在基类front中声明的方法:

Tyre

只有后者(public void front() public void front(long a) )匹配调用public void front(long a)的参数,并且该方法不会被子类覆盖。因此显示t.front(a)

调用Radial Tire with long会调用子类的方法 - ((TestSolution)t).front(a);

答案 3 :(得分:0)

一般规则:如果我有一个类的变量,我只能访问该类中定义的方法和组件。

唯一的特例是:

  1. 你在超类和子类中都有一个组件或方法(覆盖)
  2. 你有一个超类的变量和一个子类的对象(你的情况)
  3. 在这些情况下,您可以遵循以下规则:

    1. 对于组件,变量的类型决定使用哪个
    2. 表示对象类型的方法(后期绑定)
    3. 如前所述,方法未被覆盖,因此您无法应用最后一条规则。

答案 4 :(得分:0)

让我们了解overloadingoverriding

之间的区别

重载:

  

Java编程语言支持重载方法,Java可以区分具有不同方法签名的方法。这意味着如果类中的方法具有不同的参数列表

,则它们可以具有相同的名称

重写:

  

具有相同签名(名称,加上其参数的数量和类型)的子类中的实例方法以及作为超类中的实例方法的返回类型将覆盖超类的方法。

Tyre声明front()方法,long作为参数。

TyreSolution声明front()方法,int作为参数。

由于方法签名不同,TyreSolution重载Tyre' front()方法

如果您更改front()TyreSolution的签名以接受long值作为输入参数而不是int,则TyreSolution会覆盖Tyre's front()方法。

e.g。 TestSolution方法的front()类定义

public void front(long a) throws RuntimeException {
    System.out.println("Radial Tire with long in TestSolution");
}

输出:

Radial Tire with long in TestSolution