【问题标题】:When a class implements two interfaces, interfaces have same method name but different return type why it wont work?当一个类实现两个接口时,接口具有相同的方法名称但返回类型不同,为什么它不起作用?
【发布时间】:2017-04-29 08:20:41
【问题描述】:

当一个类实现两个接口时,接口具有相同的方法名称但返回类型不同,为什么它不起作用? java会给出编译错误,为什么不能重载interface_1类中的方法?

import static java.lang.System.out; 
    interface A1{
        int add();
    }
    interface A2{
        String add();
    }
    public class interface_1 implements A1,A2{

        public static void main(String args[]){
        out.println("a");
        }

        @Override
        public String add() {
            // TODO Auto-generated method stub
            return null;
        }
        @Override
        public int add() {
            // TODO Auto-generated method stub
            return 2;
        }
    }

【问题讨论】:

  • "为什么不能重载 interface_1 类中的方法?"如果您不实现接口,您希望能够这样做吗? JLS 只是禁止这样做。 (C# 正常,但允许显式接口实现来解决这个问题。)

标签: java interface overloading


【解决方案1】:

您不能这样做的原因与您不能仅在其返回类型上重载方法的原因相同:Java 缺少语法来选择在方法名称和参数相同时要调用的方法。

当你写作时

object res = obj.add();

编译器不知道您要调用两个add 方法中的哪一个,一个返回intString,因为它们的名称和参数相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    相关资源
    最近更新 更多