关于java的多态

lz1019 2016-06-07 11:19:09
最近看了几篇文章,发现两个列子很像,可是结果却不同,百思不得其解,特来问问各位。如下:
class Human{
}
class Man extends Human{
}
class Woman extends Human{
}

public class StaticPai{

public void say(Human hum){
System.out.println("I am human");
}
public void say(Man hum){
System.out.println("I am man");
}
public void say(Woman hum){
System.out.println("I am woman");
}

public static void main(String[] args){
Human man = new Man();
Human woman = new Woman();
StaticPai sp = new StaticPai();
sp.say(man);
sp.say(woman);
}
}
上面的例子返回结果是:
I am human
I am human

下面这个例子是:
public class A {
public String show(D obj) {
return ("A and D");
}

public String show(A obj) {
return ("A and A");
}

}

public class B extends A{
public String show(B obj){
return ("B and B");
}

public String show(A obj){
return ("B and A");
}
}

public class C extends B{

}

public class D extends B{

}

public class Test {
public static void main(String[] args) {
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();

System.out.println("3--" + a1.show(d));
}
}
返回结果是:
3--A and D
这两个结果为什么会不一样,感觉调用方式是相同的啊
...全文
136 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lz1019 2016-06-07
  • 打赏
  • 举报
回复
还是没搞懂两者调用有什么区别
qq_15915835 2016-06-07
  • 打赏
  • 举报
回复
首先 第一个不是多态的问题,是方法重载 第二个 你调用的是A的show方法啊,参见重载,你的参数是D,那就是调用A.show(D obj) OVER
lz1019 2016-06-07
  • 打赏
  • 举报
回复
按道理来说下面那个例子应该返回3--A and A才跟上面那个相同吧
lz1019 2016-06-07
  • 打赏
  • 举报
回复
好吧,我应该看出来原因了一个是Human man = new Man(); 一个是A a1 = new A(); 这就是区别

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧