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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴通 中级黑马   /  2012-8-22 20:21  /  1321 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

大家帮我看看这段代码是什么问题?
还有就是多态成员:非静态时编译看左边,运行看右边
静态时编译和运行都看左边   能不能举例说明一下  谢谢

6 个回复

正序浏览
吴通 中级黑马 2012-8-22 21:19:28
7#
奥,是的   谢谢   问题已解决!
回复 使用道具 举报
  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"));而里面的那个输出语句有返回值,当然编译不同过啦!
回复 使用道具 举报
报错在
System.out.println(f.method());

System.out.println(z.method());
说的是此处不允许使用“void”类型
回复 使用道具 举报
浅尝不止 发表于 2012-8-22 20:55
这个程序子类父类都有method方法,为什么编译通过不了啊?

报的是什么错?
回复 使用道具 举报
这个程序子类父类都有method方法,为什么编译通过不了啊?
回复 使用道具 举报
至于这个问题嘛!这就要说到静态绑定与动态绑定的问题了,所谓的静态绑定就是,在类加载的时候,该方法就被绑定在类上,所以多态上用父类的引用,运行的时候也是走的是父类的方法,而动态绑定,是需要运行时,对方法进行搜索并锁定,所以多态上用父类的引用,编译的时候查看父类是否由此方法,如果有的话,运行的话就会运行子类与父类相同的方法,如果父类没有该方法,编译的时候就会报错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马