黑马程序员技术交流社区

标题: 多态问题,有点蒙,谁能帮我理理? [打印本页]

作者: 小麦芽    时间: 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