黑马程序员技术交流社区

标题: 字符类的程序编译通过不了 [打印本页]

作者: 吴通    时间: 2012-8-22 20:21
标题: 字符类的程序编译通过不了
class Fu
{
void method()
{
  System.out.println("Fu.run");
}
}
class Zi extends Fu
{
void method()
{
  System.out.println("Zi.run");
}
}
class ZF
{
public static void main(String[] args)
{
  Fu f=new Zi();
  System.out.println(f.method());
  Zi z=new Zi();
  System.out.println(z.method());
}
}

大家帮我看看这段代码是什么问题?
还有就是多态成员:非静态时编译看左边,运行看右边
静态时编译和运行都看左边   能不能举例说明一下  谢谢
作者: 全海波    时间: 2012-8-22 20:44
至于这个问题嘛!这就要说到静态绑定与动态绑定的问题了,所谓的静态绑定就是,在类加载的时候,该方法就被绑定在类上,所以多态上用父类的引用,运行的时候也是走的是父类的方法,而动态绑定,是需要运行时,对方法进行搜索并锁定,所以多态上用父类的引用,编译的时候查看父类是否由此方法,如果有的话,运行的话就会运行子类与父类相同的方法,如果父类没有该方法,编译的时候就会报错
作者: 吴通    时间: 2012-8-22 20:55
这个程序子类父类都有method方法,为什么编译通过不了啊?
作者: 全海波    时间: 2012-8-22 21:09
浅尝不止 发表于 2012-8-22 20:55
这个程序子类父类都有method方法,为什么编译通过不了啊?

报的是什么错?
作者: 吴通    时间: 2012-8-22 21:17
报错在
System.out.println(f.method());

System.out.println(z.method());
说的是此处不允许使用“void”类型
作者: 全海波    时间: 2012-8-22 21:17
  1. class Fu
  2. {
  3.    void method()
  4.    {
  5.                 System.out.println("Fu.run");
  6.    }
  7. }
  8. class Zi extends Fu
  9. {
  10.         void method()
  11.         {
  12.                 System.out.println("Zi.runr");
  13.         }
  14. }
  15. class ZF
  16. {
  17.         public static void main(String[] args)
  18.         {
  19.                 Fu f=new Zi();
  20.                 f.method();
  21.                         //System.out.println(f.method());
  22.                 Zi z=new Zi();
  23.                   z.method();
  24.                         //System.out.println(z.method());
  25.         }
  26. }

复制代码
注释上面两句即可,因为你你的语句是这样的:System.out.println(System.out.println("Fu.run"));而里面的那个输出语句有返回值,当然编译不同过啦!
作者: 吴通    时间: 2012-8-22 21:19
奥,是的   谢谢   问题已解决!




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