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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cyh8807 中级黑马   /  2013-3-10 15:56  /  1701 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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 20:10

7 个回复

倒序浏览
本帖最后由 wodeairenw 于 2013-3-10 16:26 编辑

你这代码编译都通不过~!~!你验证过没?再把子类都注释掉再编译就会提示你类没定义抽象。
抽象类特点:
1:抽象方法一定在抽象类中。
2:抽象方法和抽象类都必须被abstract关键字修饰
3:抽象类不可以用new创建对象,因为调用抽象方法没意义。
4:抽象类中的抽象方法要被使用,必须由子类覆写起所有抽象方法后,建立子类对象调用,
如果子类只覆盖部分抽象方法,那么该子类还是一个抽象类。
帮你找出几个错误,写代码要仔细啊。
abstract class Employee//需要定义抽象,估计你代码没编译就提问题了
{
        private String name;
    private String id;
       private double pay;
        Employee(String name,String id,double pay)
       {
                this.name = name;
                this.id = id;
               this.pay = pay;
        }
        public abstract void work();
}
class Manager extends Employee
{
        private double bonus;
        Manager(String name,String id,double pay,double bonus)//掉了个r字母
        {
               super(name,id,pay);
                this.bonus = bonus;//这写错了
        }
        public void work()
        {
                System.out.println("manager work");
        }
}


评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
朋友,这个代码是错误的,类前边肯定要加abstract。如果有抽象方法,那么这个类肯定不可以new,你new一个带有抽象方法的类。那么这个抽象方法又不能调用,这是说不过去的。所以只要类里边含有抽象方法,那么这个类就一定是抽象的。这个程序你运行了吗?肯定运行不通过。抽象方法一定在抽象类中,这是抽象类象类的特点。
回复 使用道具 举报
本帖最后由 沈文杰 于 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: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. }
复制代码
含有抽象方法的类不需是抽象类!抽象类不能够被实例化!错误帮你标出来了
回复 使用道具 举报
话说我这段代码没有编译过,我的焦点在Employee这个类上面,因为老毕视频中这段代码在这个类中只定义了一个抽象方法,并没有将类定义为抽象的
我的疑问就因此而出,顺手敲出来问下这个问题,至于中间的那些字母错误,恕我粗心
回复 使用道具 举报
赵彦辉 发表于 2013-3-10 17:17
话说我这段代码没有编译过,我的焦点在Employee这个类上面,因为老毕视频中这段代码在这个类中只定义了一个 ...

这个地方我也注意过,毕老师是直接写的代码没编译,估计就没发现这个问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马