黑马程序员技术交流社区
标题:
关于抽象类练习,为什么不能编译通过?
[打印本页]
作者:
黑马-王鹏
时间:
2013-3-15 15:31
标题:
关于抽象类练习,为什么不能编译通过?
本帖最后由 黑马-王鹏 于 2013-3-15 15:53 编辑
/*假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:
姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个
奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方
法进行属性访问。
员工类:name id pay
经理类:继承了员工,并有自己特有的bonus。
*/
[code]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 int bonus;
Manager(String name,String id,double pay,int bonus)
{
super(name,id,pay);
this.bonus = bonus;
}
public void work()
{
System.out.println("manager work");
}
}
class Pro extends Employee
{
Pro(String name,String id,double pay)
{
super(name,id,pay);
}
public void work()
{
System.out.println("pro work");
}
}
class AbstractTest
{
public static void main(String[] args)
{
Manager m = new Manager("wp","as",1.10,1);
m.work();
}
}
复制代码
[img]file:///C:/Documents%20and%20Settings/wangpeng/Application%20Data/Tencent/Users/1198571320/QQ/WinTemp/RichOle/A_%7B%7DGZ[13U%60B47@QDGVFC)V.jpg[/img]
为什么编译不能通过?该怎么改代码才可以实现输出预定结果呢?
作者:
itserious
时间:
2013-3-15 15:47
package mypack1;
abstract class Employee //前面加上 abstract 因為你的类中有抽象方法,所以你的类也必须是抽象的。
{
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 int bonus;
Manager(String name, String id, double pay, int bonus)
{
super(name, id, pay);
this.bonus = bonus;
}
public void work()
{
System.out.println("manager work");
}
}
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 AbstractTest //前面加上 public
{
public static void main(String[] args)
{
Manager m = new Manager("wp", "as", 1.10, 1);
m.work();
}
}
作者:
何仕映
时间:
2013-3-15 15:47
在你的Employee类中有一个抽象的方法,因此需要在类上面声明。另外经理应该继承的是Pro而不是Employee。具体的请看代码,看了你就明白了
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 Pro //经理应该继承的是员工,不是雇员。
{
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("manager work");
}
}
class Pro extends Employee
{
Pro(String name,String id,double pay)
{
super(name,id,pay);
}
public void work()
{
System.out.println("pro work");
}
}
class AbstractTest
{
public static void main(String[] args)
{
Manager m = new Manager("wp","as",1.10,1);
m.work();
}
}
复制代码
作者:
HM刘俊
时间:
2013-3-15 15:56
[code]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 int bonus;
Manager(String name,String id,double pay,int bonus)
{
super(name,id,pay);
this.bonus = bonus;
}
public void work()
{
System.out.println("manager work");
}
}
class Pro extends Employee
{
Pro(String name,String id,double pay)
{
super(name,id,pay);
}
public void work()
{
System.out.println("pro work");
}
}
class AbstractTest
{
public static void main(String[] args)
{
Manager m = new Manager("wp","as",1.10,1);
m.work();
}
复制代码
现在你就可以运行了。因为类中有抽象方法,所以其所在的类必须为抽象类。
作者:
李思杰
时间:
2013-3-15 15:57
因为你在Employee类中有一个抽象方法
public abstract void work();//抽象方法
复制代码
所以要在Employee类前加上abstract,写成abstract class Employee就行了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2