在继承中重载

问题描述 投票:-4回答:1

所以我在学习动态编程时遇到了重载分辨率这个概念,但我很难理解这一点。语句如下所示 - “如果编译器找不到任何具有匹配参数类型的方法,或者在应用转换(强制转换)后多个方法都匹配,则编译器报告错误”

我试图在一个例子的帮助下验证声明,它跟下面一样 -

public class OverloadingResolution{
    public static void main(String[] args){
        ClassB b= new ClassB();
        b.check(3);
        ClassB c=new ClassC();
        c.check(3)
    }
}

class ClassA{
    public void check(float a){
        System.out.println("Inside ClassA----> value of a is"+a);
    }
}

class ClassB extends ClassA{
    public void check(float a){
        System.out.println("Inside ClassB----> value of a is"+a);
    }
}

class ClassC extends ClassB{
    public void check(short a){
        System.out.println("Inside ClassC----> value of a is"+a);
    }
}

结果是: 在ClassB内部值---> a的值是3.0 在ClassB内部值---> a的值是3.0

我怀疑是我期望编译时错误为ClassB b= new ClassB();,因为b有多个匹配参数的方法。

java
1个回答
0
投票

输出是正确的,因为在类C中没有执行方法重写,类C不会覆盖类B的check()方法,类C中的check方法被视为类C的单独方法。

注意: - 您正在代码中执行方法覆盖而不是方法重载,方法重载可以在单个类中完成。方法重载意味着同一方法名称相同但方法中的参数不同。在Method Overriding中,将有多个类。

方法覆盖的规则:

1.该方法必须与父类中的名称相同

2.该方法必须具有与父类相同的参数。

3.必须有一个IS-A关系(继承)。

据你说:“如果编译器找不到任何匹配参数类型的方法” - >编译器在类B中找到方法check(),那么它不会给出编译时错误。

请参考OverloadingOverriding

© www.soinside.com 2019 - 2024. All rights reserved.