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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wuzeshui 中级黑马   /  2016-1-18 23:44  /  616 人查看  /  8 人回复  /   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();
                        }
                }

8 个回复

倒序浏览
多态的应用题;多态的成员方法是编译看父类,运行看子类;此题中f.method()父类中没有此方法,子类中特有的,编译不通过,
回复 使用道具 举报 1 0
f.show()方法父类中有,子类中也有,编译通过,运行就看子类的方法所以输出的是zi method()
回复 使用道具 举报
  f.method();这句代码不正确 Fu f = new Zi(); 向上转型后不能使用子类中特有方法,不知道自己说的对不对,要是错了,还希望不要介意
回复 使用道具 举报
编译看左边运行看右边
回复 使用道具 举报
Fu f = new Zi();,编译时f是Fu的引用,查阅Fu中是否有调用的方法;运行时,f是Zi中的对象,查阅Zi中是否有可调用的成员(编译看左边运行看右边)。(原因是编译期间没有对象建立)

method()是子类中的方法,父类中没有,编译时没有建立对象,在编译期要生成的Fu.class文件中并没有method()方法,所以f.method(); 无法通过编译。

f.show();运行结果是zi show,因为运行时前面建立了Zi的对象实例,当父类引用f指向其子类的对象的时候,子类复写父类的方法,通过f访问的是子类对象的成员。(多态)
回复 使用道具 举报
f.method() ,这句有错误
回复 使用道具 举报
cgy123 中级黑马 2016-1-19 21:13:21
8#
  Fu f = new Zi();父类 能用子类新建对象吗
回复 使用道具 举报
能创建对象,父类引用指向子类对象,动态绑定  编译看左边运行看右边,所以f.method() ,这句有错误
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马