A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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方法了?
        }
}

7 个回复

倒序浏览
就是父类变量可以指向子类对象,用该变量调用某方法时走的是子类的方法,如果子类没有覆盖该方法才会走父类的方法。
回复 使用道具 举报
我也晕了,你要是弄明白了跟我讲讲
回复 使用道具 举报
二楼正解,不能用就近原则这里
回复 使用道具 举报
楼主,c继承b的方法少了个l,public那!   父类的变量指向了子类,通俗来讲指向了谁,就调用了谁.
回复 使用道具 举报
没懂。。。。。。。。。。。。。。。
回复 使用道具 举报
yangxiaosa 发表于 2017-3-22 20:39
就是父类变量可以指向子类对象,用该变量调用某方法时走的是子类的方法,如果子类没有覆盖该方法才会走父类 ...

A类中的show方法中调用的show2方法,为什么会调到子类的show2方法去了,为什么不是父类的show2方法
回复 使用道具 举报
我过来请帖,是的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马