黑马程序员技术交流社区
标题:
多态问题,有点蒙,谁能帮我理理?
[打印本页]
作者:
小麦芽
时间:
2017-3-22 19:18
标题:
多态问题,有点蒙,谁能帮我理理?
class A {
public void show(){
show2();
}
public void show2(){
System.out.println("我");
}
}
calss B extends A {
public void show2(){
System.out.println("你");
}
}
class C extends B {
pubic void show(){
super.show();
}
public void show2(){
System.out.println("他");
}
}
class Test2{
public static void main(String[] args){
A a= new B();
a.show();
//这道题我一直有点蒙。谁能帮我理理。
//首先多态,编译看左边,运行看右边,上面这个,当运行时发现B类中没有show()方法肯定会去父类中找对吧。
//问题在于,父类中的show()方法调用了show2(),根据就近原则,父类A有show2()方法就应该调用自己的,为什么运行结果变成
//调用子类B中的show2方法了?
B b=new C();
b.show();
//这个问题,和上面一样,父类A有show2()方法就应该调用自己的,为什么运行结果变成
//调用子类C中的show2方法了?
}
}
作者:
yangxiaosa
时间:
2017-3-22 20:39
就是父类变量可以指向子类对象,用该变量调用某方法时走的是子类的方法,如果子类没有覆盖该方法才会走父类的方法。
作者:
亮仔开发
时间:
2017-3-22 23:20
我也晕了,你要是弄明白了跟我讲讲
作者:
mrwalker
时间:
2017-3-23 09:22
二楼正解,不能用就近原则这里
作者:
黑马小黑
时间:
2017-3-23 10:46
楼主,c继承b的方法少了个l,public那! 父类的变量指向了子类,通俗来讲指向了谁,就调用了谁.
作者:
仁行天下
时间:
2017-3-23 11:54
没懂。。。。。。。。。。。。。。。
作者:
小麦芽
时间:
2017-3-24 12:02
yangxiaosa 发表于 2017-3-22 20:39
就是父类变量可以指向子类对象,用该变量调用某方法时走的是子类的方法,如果子类没有覆盖该方法才会走父类 ...
A类中的show方法中调用的show2方法,为什么会调到子类的show2方法去了,为什么不是父类的show2方法
作者:
若梦蓝山悠长
时间:
2017-3-24 12:14
我过来请帖,是的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2