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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 编程学徙 中级黑马   /  2014-6-5 15:10  /  1956 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 编程学徙 于 2014-6-6 04:08 编辑
  1. abstract class YuanGong
  2. {
  3.         private String name;
  4.         private int age;
  5.         private double pay;
  6.         public abstract void work();
  7.         public void speak()
  8.         {
  9.                 System.out.printf("My name is %s,I'm %d",name,age);
  10.         }
  11.         YuanGong(String name,int age)
  12.         {
  13.                 this.name = name;
  14.                 this.age = age;
  15.         }        
  16. }
  17. class GuYuan extends YuanGong
  18. {
  19.         public void work()
  20.         {
  21.                 System.out.println("I'm working hard!");
  22.         }
  23. }
  24. public class AbstractDemo
  25. {
  26.         public static void main(String[] args)
  27.         {
  28.                 GuYuan yuan = new GuYuan("zhang san",18);
  29.                 yuan.speak();
  30.                 yuan.work();
  31.         }
  32. }
复制代码
我觉得我跟毕老师的代码基本一样啊……为什么没有一个正确的结果?


9 个回复

倒序浏览
子类的要写有参的构造函数
回复 使用道具 举报
当父类没有无参的构造函数的时候,子类中必须手动的声明调用哪个父类的构造函数。子类的构造函数不写的话会有一个默认的无参的构造函数,默认的无参的构造函数里面有哥隐藏的super(),父类的无参构造函数已经没有了,所以会报错
回复 使用道具 举报
当父类没有无参的构造函数的时候,子类中必须手动的声明调用哪个父类的构造函数。子类的构造函数不写的话会有一个默认的无参的构造函数,默认的无参的构造函数里面有哥隐藏的super(),父类的无参构造函数已经没有了,所以会报错
回复 使用道具 举报
去这里看看,也许对你有帮助
http://blog.csdn.net/newmoon2004/article/details/5951437
回复 使用道具 举报
好问题啊,我常常会犯的问题。
回复 使用道具 举报
  1. abstract class YuanGong
  2. {
  3.         private String name;
  4.         private int age;
  5.         private double pay;
  6.         public abstract void work();
  7.         public void speak()
  8.         {
  9.                 System.out.printf("My name is %s,I'm %d",name,age);
  10.         }
  11.         YuanGong(String name,int age)
  12.         {
  13.                 this.name = name;
  14.                 this.age = age;
  15.         }        
  16. }
  17. class GuYuan extends YuanGong
  18. {      //声明调用父类的有参构造方法
  19.         GuYuan(String name, int age) {
  20.                 super(name, age);
  21.                 // TODO Auto-generated constructor stub
  22.         }

  23.                 public void work()
  24.         {
  25.                 System.out.println("I'm working hard!");
  26.         }
  27. }
  28. public class AbstractDemo
  29. {
  30.         public static void main(String[] args)
  31.         {
  32.                 GuYuan yuan = new GuYuan("zhang san",18);
  33.                 yuan.speak();
  34.                 yuan.work();
  35.         }
  36. }
复制代码
回复 使用道具 举报
原来如此,了解了,谢谢大家!!
以下是修改过的代码……
  1. abstract class YuanGong
  2. {
  3.         private String name;
  4.         private int age;
  5.         private double pay;
  6.         public abstract void work();
  7.         public void speak()
  8.         {
  9.                 System.out.printf("My name is %s,I'm %d",name,age);
  10.         }
  11.         /*YuanGong()
  12.         {
  13.         }*/
  14.         YuanGong(String name,int age)
  15.         {
  16.                 this.name = name;
  17.                 this.age = age;
  18.         }       
  19. }
  20. class GuYuan extends YuanGong
  21. {
  22.         /*
  23.         要写出子类的有参构造函数,
  24.         并在其中用super调用父类的有参构造函数,
  25.         如此,才能在创建子类对象时,把参数传给对象。
  26.         */
  27.         GuYuan(String name,int age)
  28.         {
  29.                 super(name,age);                               
  30.         }
  31.         public void work()
  32.         {
  33.                 System.out.println("I'm working hard!");
  34.         }
  35. }
  36. public class AbstractDemo
  37. {
  38.         public static void main(String[] args)
  39.         {
  40.                 GuYuan yuan = new GuYuan("zhang san",18);
  41.                 yuan.speak();
  42.                 yuan.work();
  43.         }
  44. }
复制代码
回复 使用道具 举报
子类要有带参数的构造函数,不然新建对象无法初始化
回复 使用道具 举报
本想复制下来看看,但是发现复制不了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马