对于下面的代码,我无法理解如何调用重载函数 任何人都可以详细解释当对象分别使用Side和Tail引用时如何进行重载函数调用。
interface Side {
String getSide();
}
class Head implements Side {
public String getSide() {
return "Head ";
}
}
class Tail implements Side {
public String getSide() {
return "Tail ";
}
}
class Coin {
public static void overload(Head side) {
System.out.print(side.getSide());
}
public static void overload(Tail side) {
System.out.print(side.getSide());
}
public static void overload(Side side) {
System.out.print("Side ");
}
public static void overload(Object side) {
System.out.print("Object ");
}
public static void main(String[] args) {
Side firstAttempt = new Head();
Tail secondAttempt = new Tail();
overload(firstAttempt);
overload((Object) firstAttempt);
overload(secondAttempt);
overload((Side) secondAttempt);
}
}
答案 0 :(得分:1)
http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html
你有四个同名的方法(重载),但都有不同的签名......一个接受一个Head,另一个接受一个Tail,另一个接收一个Side,最后一个接受一个Object。由于Head和Tail都继承自Side,因此方法重载(Side side)将接受作为参数。类似地,由于Head和Tail都来自Object,因此重载(Object obj)也会接受。
在您的特定示例中,firstAttempt的类型为Side,因此当您调用overload(firstAttempt)时,您正在使用重载(Side Side)方法。您的第二个调用显式转换为Object,因此您正在使用重载(Object obj)。您的secondAttempt变量的类型为Tail,因此重载(secondAttempt)会调用重载(尾部尾部)。最后,重载((Side)secondAttempt)显式地转换为Side,因此调用了重载(侧面)。
答案 1 :(得分:1)
以小块的形式消化这个概念!
首先了解此代码
interface Side
{
String getSide();
}
class Head implements Side
{
public String getSide()
{
return "Head ";
}
}
class Tail implements Side
{
public String getSide()
{
return "Tail ";
}
}
它创建一个接口,2个类实现它。覆盖功能。 那你的最后一堂课,
public class Coin
{
public static void overload(Head side)
{
System.out.println(side.getSide()+" -> "+side);
}
public static void overload(Tail side)
{
System.out.println(side.getSide()+" -> "+side);
}
public static void overload(Side side)
{
System.out.println("Side <- "+side);
}
public static void overload(Object side)
{
System.out.println("Object <- "+side);
}
public static void main(String[] args)
{
Side a = new Head();
Side b = new Tail();
Head c = new Head();
Tail d = new Tail();
overload(a);
overload((Side) a);
overload((Object) a);
overload(b);
overload((Side) b);
overload((Object) b);
overload(c);
overload((Side) c);
overload((Object) c);
overload(d);
overload((Side) d);
overload((Object) d);
}
在纸上逐行模拟主要功能的干运行 将代码映射到示例输出,如下所示:
对于 Side a = new Head(),
Side <- Head@12d5e310
Side <- Head@12d5e310
Object <- Head@12d5e310
对于 Side b = new Tail(),
Side <- Tail@182e3919
Side <- Tail@182e3919
Object <- Tail@182e3919
Head c = new Head(),
Head -> Head@2a6a4b6
Side <- Head@2a6a4b6
Object <- Head@2a6a4b6
Tail d = new Tail(),
Tail -> Tail@a87aa16
Side <- Tail@a87aa16
Object <- Tail@a87aa16
标记每个对象的引用相同,@ hashcode!
也是如此