黑马程序员技术交流社区

标题: 自学基础——abstract的问题 [打印本页]

作者: 编程学徙    时间: 2014-6-5 15:10
标题: 自学基础——abstract的问题
本帖最后由 编程学徙 于 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. }
复制代码
我觉得我跟毕老师的代码基本一样啊……为什么没有一个正确的结果?



作者: 肥洋洋    时间: 2014-6-5 15:31
子类的要写有参的构造函数
作者: 肥洋洋    时间: 2014-6-5 15:39
当父类没有无参的构造函数的时候,子类中必须手动的声明调用哪个父类的构造函数。子类的构造函数不写的话会有一个默认的无参的构造函数,默认的无参的构造函数里面有哥隐藏的super(),父类的无参构造函数已经没有了,所以会报错
作者: 雾里看花。    时间: 2014-6-5 16:39
当父类没有无参的构造函数的时候,子类中必须手动的声明调用哪个父类的构造函数。子类的构造函数不写的话会有一个默认的无参的构造函数,默认的无参的构造函数里面有哥隐藏的super(),父类的无参构造函数已经没有了,所以会报错
作者: 阿布Yocan    时间: 2014-6-5 17:23
去这里看看,也许对你有帮助
http://blog.csdn.net/newmoon2004/article/details/5951437
作者: 阿苏勒    时间: 2014-6-5 17:26
好问题啊,我常常会犯的问题。
作者: pk49800    时间: 2014-6-5 21:03
  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. }
复制代码

作者: 编程学徙    时间: 2014-6-6 04:07
原来如此,了解了,谢谢大家!!
以下是修改过的代码……
  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. }
复制代码

作者: 杨胜男    时间: 2014-6-6 10:23
子类要有带参数的构造函数,不然新建对象无法初始化
作者: GoodBoy123    时间: 2014-6-6 19:09
本想复制下来看看,但是发现复制不了。




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