黑马程序员技术交流社区

标题: 看看结果是啥 为啥? [打印本页]

作者: why910107    时间: 2016-6-10 21:45
标题: 看看结果是啥 为啥?
class Fu {
                        public void show() {
                                System.out.println("fu show");
                        }
                }
       
                class Zi extends Fu {
                        public void show() {
                                System.out.println("zi show");
                        }
       
                        public void method() {
                                System.out.println("zi method");
                        }
                }
       
                class Test1Demo {
                        public static void main(String[] args) {
                                Fu f = new Zi();
                                f.method();
                                f.show();
                        }
                }
作者: azraeljia    时间: 2016-6-10 21:53
f.method();  父类不能直接调用子类特有的方法   编译看左边,运行看右面 编译不通过吧
作者: 46期李帅    时间: 2016-6-10 22:23
azraeljia 发表于 2016-6-10 21:53
f.method();  父类不能直接调用子类特有的方法   编译看左边,运行看右面 编译不通过吧 ...

运行看右边,右边是Zi类,Zi类有method,为什么编译通不过???创建的是子类对象啊
作者: 丿若恋灬如初    时间: 2016-6-10 22:50
46期李帅 发表于 2016-6-10 22:23
运行看右边,右边是Zi类,Zi类有method,为什么编译通不过???创建的是子类对象啊 ...

父类有method?子类继承父类,父类没有method,调用method方法会报错
作者: 18634319112    时间: 2016-6-10 22:59
楼上正解,老子有的儿子都有,儿子有的老子不能调用
作者: azraeljia    时间: 2016-6-11 00:44
46期李帅 发表于 2016-6-10 22:23
运行看右边,右边是Zi类,Zi类有method,为什么编译通不过???创建的是子类对象啊 ...

因为是父类创建指向子类对象,而并非单纯的那种创建一个对象, 而方法编译的时候是遵循编译看左边,运行看右边,首先你编译通过了才会有运行,编译的时候父类没有method()方法,所以编译不通过,更别说运行了.如果父类有method()方法,则编译通过,运行的时候运行的是子类的method()方法.先有父亲才有儿子的.




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