chathura
chathura

Reputation: 3452

Java calling overloaded methods

Consider this code segment

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; 
   } 
}

If I execute this lines of code,

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

The results would be : buy(int,double)

I want to know how the compiler decide which method to execute?

Upvotes: 0

Views: 3891

Answers (1)

Ignavia
Ignavia

Reputation: 166

If you have overloaded methods, the compiler figures out the most specific candidate using the method signature. In this case the two signatures are

buy(int, double)

and

buy(long, double).

Note that the return type is not part of the signature. You are calling a method using buy(byte, int). Since int is more specific than long, the first method is called. More specific means that int is the smaller of the two type to contain byte.

However, the compiler cannot figure out the most specific candidate all the time:

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

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

foo(3, 4);

This code will not compile, because it is not clear which of the methods is meant.

Upvotes: 4

Related Questions