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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张小贝 中级黑马   /  2014-1-8 06:56  /  1197 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个抽象类的子类也是一个抽象类可是抽象类又不能创建对象,我晕了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();
}
abstract class Manager  extends Employee{
private int bonus;
Manager(String name ,String id ,double pay,int bonus){
  super(name,id,pay);
  this.bonus = bonus;
  public void work(){
   System.out.println("manger work");
   }
  }
}
abstract class Pro extends Employee {
Pro(String name,String id, double pay){
super(name, id , pay);
}
public void work(){
System.out.println("pro work");
}
}
public class Day7{
public static void main(String[] args){
Pro p = new Pro("zhangsan","008",8000.00);
}
不会调了。。。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

5 个回复

倒序浏览
我想你的代码中Employee应该是抽取出来的最终类吧。所以在代码中只有它使用abstract修饰成抽象类。所以该类是不能创建对象的。
而Manager、Employee是它的子类,继承了Employee,所以它们都得实现抽象类Employee中的抽象方法work。它们就可以成为普通类,所以是不需要用abstract修饰(你用abstract修饰了的话,它们就还是抽象类,所以是不能够创建对象的),可以直接创建对象并调用其方法。
  1. abstract class Employee{
  2.         private String name;
  3.         private String id;
  4.         private double pay;
  5.         Employee(String name,String id ,double pay){
  6.                 this.name = name;
  7.                 this.id = id;
  8.                 this.pay = pay;
  9.         }
  10.         public abstract void work();
  11. }

  12. class Manager  extends Employee{   //Manager不需要用abstract修饰,它的内部已经没有抽象方法了。
  13.         private int bonus;
  14.         Manager(String name ,String id ,double pay,int bonus){
  15.                 super(name,id,pay);
  16.                 this.bonus = bonus;
  17.         }
  18.         public void work(){
  19.                 System.out.println("manger work");
  20.    }
  21. }

  22. class Pro extends Employee {  //Pro也不需要用abstract修饰了;
  23.         public Pro(String name,String id, double pay){
  24.                 super(name, id , pay);
  25.         }
  26.         public void work(){
  27.                 System.out.println("pro work");
  28.         }
  29. }

  30. public class Test14{
  31.         public static void main(String[] args){
  32.                 Pro p = new Pro("zhangsan","008",8000.00); //创建对象;
  33.                 p.work();  //调用其方法。
  34.                 Manager man = new Manager("li", "007", 5000, 1000);
  35.                 man.work();
  36.                
  37.         }
  38. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
子类一般不用再抽象了,直接把父类的方法实现即可。
回复 使用道具 举报
父类是抽象的即可,因为父类是子类抽取出来的共同的功能,但是功能主体不同,所以父类用抽象的,但是子类就不用再抽象了,因为子类是具体实现这些功能的,即将父类中的函数进行复写,所以,子类不用用抽象了。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
抽象类是不能创建对象 所以要调用就找他的实现非抽象子类 用子类来声明对象 然后再调用相应方法

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
抽象类没法加建立对象,抽象类的子类,如果没实现所有的方法还是抽象类的话也没法建立对象,所以你可以弄个子类把所有方法实现了

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马