黑马程序员技术交流社区

标题: 关于抽象类的小困惑 [打印本页]

作者: cyh8807    时间: 2013-3-10 15:56
标题: 关于抽象类的小困惑
  1. class Employee
  2. {
  3.         private String name;
  4.         private String id;
  5.         private double pay;
  6.         Employee(String name,String id,double pay)
  7.         {
  8.                 this.name = name;
  9.                 this.id = id;
  10.                 this.pay = pay;
  11.         }
  12.         public abstract void work();
  13. }
  14. class Manager extends Employee
  15. {
  16.         private double bonus;
  17.         Manage(String name,String id,double pay,double bonus)
  18.         {
  19.                 super(name,id,pay);
  20.                 this.boune = bonus;
  21.         }
  22.         public void work()
  23.         {
  24.                 System.out.println("manager work");
  25.         }
  26. }
复制代码
上述代码中 public abstract void work();为抽象方法,但是抽象方法必须定义在抽象类中,但是这个类
却没有定义为抽象类。那么为什么可以在不是抽象的类中定义抽象方法呢?
在上面的这种情况下是否可以new Employee()创建具体的实例对象呢?


作者: 张宁    时间: 2013-3-10 16:18
朋友,这个代码是错误的,类前边肯定要加abstract。如果有抽象方法,那么这个类肯定不可以new,你new一个带有抽象方法的类。那么这个抽象方法又不能调用,这是说不过去的。所以只要类里边含有抽象方法,那么这个类就一定是抽象的。这个程序你运行了吗?肯定运行不通过。抽象方法一定在抽象类中,这是抽象类象类的特点。
作者: 沈文杰    时间: 2013-3-10 16:29
本帖最后由 沈文杰 于 2013-3-10 16:35 编辑
  1. abstract class Employee
  2. {
  3.         private String name;
  4.         private String id;
  5.         private double pay;
  6.         Employee(String name,String id,double pay)
  7.         {
  8.                 this.name = name;
  9.                 this.id = id;
  10.                 this.pay = pay;
  11.         }
  12.         public abstract void work();
  13. }
  14. class Manager extends Employee
  15. {
  16.         private double bonus;
  17.         Manager(String name,String id,double pay,double bonus)
  18.         {
  19.                 super(name,id,pay);
  20.                
  21.                 this.bonus = bonus;
  22.         }
  23.         public void work()
  24.         {
  25.                 System.out.println("manager work");
  26.         }
  27. }
  28. public class AbstractClass {
  29.         public static void main(String[] args){
  30.                 Manager ma = new Manager("zhangsan","kasdf",12233,10000.1);
  31.                 ma.work();
  32.                
  33.         }
  34. }
复制代码
哥们你代码错误好多啊,不是用MyEclipse编译的吧。。真心不懂你怎么过的啊
作者: 沈文杰    时间: 2013-3-10 16:34
本帖最后由 沈文杰 于 2013-3-10 16:36 编辑
  1. [color=Red]abstract[/color] class Employee
  2. {
  3.         private String name;
  4.         private String id;
  5.         private double pay;
  6.         Employee(String name,String id,double pay)
  7.         {
  8.                 this.name = name;
  9.                 this.id = id;
  10.                 this.pay = pay;
  11.         }
  12.         public abstract void work();
  13. }
  14. class Manager extends Employee
  15. {
  16.         private double bonus;
  17.         Manage[color=Red]r[/color](String name,String id,double pay,double bonus)
  18.         {
  19.                 super(name,id,pay);
  20.                 this.[color=Red]bonus[/color] = bonus;
  21.         }
  22.         public void work()
  23.         {
  24.                 System.out.println("manager work");
  25.         }
  26. }
复制代码
含有抽象方法的类不需是抽象类!抽象类不能够被实例化!错误帮你标出来了
作者: cyh8807    时间: 2013-3-10 17:17
话说我这段代码没有编译过,我的焦点在Employee这个类上面,因为老毕视频中这段代码在这个类中只定义了一个抽象方法,并没有将类定义为抽象的
我的疑问就因此而出,顺手敲出来问下这个问题,至于中间的那些字母错误,恕我粗心




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