【问题标题】:Java calling overloaded methods [duplicate]Java调用重载方法[重复]
【发布时间】:2017-01-13 18:26:40
【问题描述】:

考虑这段代码

class StockServer { 

   StockServer(String company, int Shares,double currentPrice, double cashOnHand) {}

   double buy(int numberOfShares, double pricePerShare) { 
        System.out.println("buy(int,double)"); 
        return 3.0;
   } 

   float buy(long numberOfShares, double pricePerShare) {     
        System.out.println("buy(long,double)");
        return 3.0f; 
   } 
}

如果我执行这行代码,

StockServer a = new StockServer("",2,2.0,2);
byte b=5;
a.buy(b,2);

结果是:buy(int,double)

我想知道编译器如何决定执行哪个方法?

【问题讨论】:

标签: java methods compiler-construction


【解决方案1】:

如果您有重载方法,编译器会使用方法签名找出最具体的候选方法。在这种情况下,两个签名是

buy(int, double)

buy(long, double).

请注意,返回类型不是签名的一部分。您正在使用 buy(byte, int) 调用方法。由于 int 比 long 更具体,所以调用第一个方法。更具体的意思是 int 是包含字节的两种类型中较小的一个。

但是,编译器始终无法找出最具体的候选:

public static void foo(long a, double b) {
    // body
}

public static void foo(double a, long b) {
    // body
}

foo(3, 4);

这段代码不会编译,因为不清楚是指哪个方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多