黑马程序员技术交流社区

标题: 这段代码哪有问题? [打印本页]

作者: wuzeshui    时间: 2016-1-18 23:44
标题: 这段代码哪有问题?
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();
                        }
                }


作者: zhanganping    时间: 2016-1-19 00:16
多态的应用题;多态的成员方法是编译看父类,运行看子类;此题中f.method()父类中没有此方法,子类中特有的,编译不通过,
作者: zhanganping    时间: 2016-1-19 00:18
f.show()方法父类中有,子类中也有,编译通过,运行就看子类的方法所以输出的是zi method()
作者: 阿蛮    时间: 2016-1-19 00:23
  f.method();这句代码不正确 Fu f = new Zi(); 向上转型后不能使用子类中特有方法,不知道自己说的对不对,要是错了,还希望不要介意
作者: hansnowqiang    时间: 2016-1-19 08:56
编译看左边运行看右边
作者: fagug    时间: 2016-1-19 09:29
Fu f = new Zi();,编译时f是Fu的引用,查阅Fu中是否有调用的方法;运行时,f是Zi中的对象,查阅Zi中是否有可调用的成员(编译看左边运行看右边)。(原因是编译期间没有对象建立)

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

f.show();运行结果是zi show,因为运行时前面建立了Zi的对象实例,当父类引用f指向其子类的对象的时候,子类复写父类的方法,通过f访问的是子类对象的成员。(多态)
作者: 苗超维    时间: 2016-1-19 12:13
f.method() ,这句有错误
作者: cgy123    时间: 2016-1-19 21:13
  Fu f = new Zi();父类 能用子类新建对象吗
作者: 281884702    时间: 2016-1-19 21:52
能创建对象,父类引用指向子类对象,动态绑定  编译看左边运行看右边,所以f.method() ,这句有错误




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