黑马程序员技术交流社区

标题: 多态面试题 [打印本页]

作者: 糊图    时间: 2016-6-30 23:42
标题: 多态面试题
                class A {
                        public void show() {
                                show2();
                        }
                        public void show2() {
                                System.out.println("我");
                        }
                }
                class B extends A {
                        public void show() {
                                show2();
                        }
                        public void show2() {
                                System.out.println("爱");
                        }
                }
                class C extends B {
                        public void show() {
                                super.show();
                        }
                        public void show2() {
                                System.out.println("你");
                        }
                }
                public class Test2DuoTai {
                        public static void main(String[] args) {                               
                                B b = new C();
                                b.show();
                        }
                }

疑问:编译看父类,是没有问题的,而编译的时候有些不太理解,b.show() 访问c类中的show()方法,里面有个super.show()方法,那么会访问父类中的show()方法,而父类中的show()中又有show2()方法,我一直理解的是show2()方法会执行父类中的show2()方法,但是实际上是访问了子类中的show2()方法,有没有哪位帮忙解决一下,谢谢
作者: lizihanglove    时间: 2016-7-1 00:07
我也同样很疑惑,调用super.show();时去执行父类(B)中的show()方法,里面的show2()方法又跑到子类(C)去执行show2()方法.只能是记住动态绑定时,通常是编译看左边,运行看右边原则。
作者: itismyhao    时间: 2016-7-1 03:19
java还没看到面向对象部分。但是用之前c++去理解,不太能明白你的说法。等我这几天学到了再来看看
作者: ylca    时间: 2016-7-1 09:25
C类中 类似于重写了B类的show2()函数访问的当然是子类对象
方法只要名字相同、参数的个数和类型都相同,那么子类的方法就会覆盖父类的方法,不论public还是private,不会同时运行。
父类的方法如果不想让子类重写,使用final关键字修饰方法就可以了。
作者: Ake丶    时间: 2016-7-1 10:33
ylca 发表于 2016-7-1 09:25
C类中 类似于重写了B类的show2()函数访问的当然是子类对象
方法只要名字相同、参数的个数和类型都相同,那 ...

很正确。
作者: ylca    时间: 2016-7-1 11:29
Ake丶 发表于 2016-7-1 10:33
很正确。

刚才试了自测考试! 挂在反射了
作者: 逆风搁浅    时间: 2016-7-1 16:30
子类中有的就不用父类的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2