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

© why910107 中级黑马   /  2016-6-10 21:45  /  820 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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();
                        }
                }

5 个回复

倒序浏览
f.method();  父类不能直接调用子类特有的方法   编译看左边,运行看右面 编译不通过吧
回复 使用道具 举报 1 0
azraeljia 发表于 2016-6-10 21:53
f.method();  父类不能直接调用子类特有的方法   编译看左边,运行看右面 编译不通过吧 ...

运行看右边,右边是Zi类,Zi类有method,为什么编译通不过???创建的是子类对象啊
回复 使用道具 举报
46期李帅 发表于 2016-6-10 22:23
运行看右边,右边是Zi类,Zi类有method,为什么编译通不过???创建的是子类对象啊 ...

父类有method?子类继承父类,父类没有method,调用method方法会报错
回复 使用道具 举报
楼上正解,老子有的儿子都有,儿子有的老子不能调用
回复 使用道具 举报
46期李帅 发表于 2016-6-10 22:23
运行看右边,右边是Zi类,Zi类有method,为什么编译通不过???创建的是子类对象啊 ...

因为是父类创建指向子类对象,而并非单纯的那种创建一个对象, 而方法编译的时候是遵循编译看左边,运行看右边,首先你编译通过了才会有运行,编译的时候父类没有method()方法,所以编译不通过,更别说运行了.如果父类有method()方法,则编译通过,运行的时候运行的是子类的method()方法.先有父亲才有儿子的.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马