/*
在学习毕向东老师的课程时,自己遇到的问题。
雇员示例:
需求:公司中程序员有姓名,工号,薪水,工作内容。
项目经理除了有姓名。工号,薪水,还有奖金,工作内容。
对给出的需求进行数据建模。
分析:
程序员
属性:
姓名 工号 薪水
行为:工作
经理
属性
姓名 工号 薪水 奖金
行为:工作
共性:
雇员:
属性:
姓名 工号 薪水
行为:工作
*/
//描述上面的三类员工:
错误思路
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;
}
abstract void work();
};
class Programmer extends Employee
{
Programmer(String name,String id,double pay)
{
super(name,id,pay);
}
void work()
{
System.out.println("hard...");
}
};
class Manager extends Employee
{ private int bonus;
Manager(String name,String id,double pay,int bonus)
{
super(name,id,pay);
this.bonus=bonus;
}
void work()
{
System.out.println("manager...");
}
};
class AbstractDemo2
{
public static void main(String[] args)
{
Manager m=new Manager("张三","123",2000.0,1000);
System.out.println(m.name);
}
};
注意:
name在Employee中是私有的访问控制,那么manager继承Employee的name也是私有的,也是访问控制,主函数想要用这个成员变量的话需要写一个setName(String n);和getName();方法,同过这个方法获得name.
修改后:
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 void setName(String name) //加入set和get方法,实现对成员的控制。
{
this.name=name;
}
public String getName()
{
return name;
}
public void setId(String id)
{
this.id=id;
}
public String getId()
{
return id;
}
public void setPay(double pay)
{
this.pay=pay;
}
public double getPay()
{
return pay;
}
abstract void work();
};
class Programmer extends Employee
{
Programmer(String name,String id,double pay)
{
super(name,id,pay);
}
void work()
{
System.out.println("hard...");
}
};
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 setBonus(int bonus)
{
this.bonus=bonus;
}
public int getBonus()
{
return bonus;
}
void work()
{
System.out.println("manager...");
}
};
class AbstractDemo2
{
public static void main(String[] args)
{
Manager m=new Manager("张三","123",2000.0,1000);
m.setName("李四"); //可以通过set方法修改信息
String n=m.getName(); //可以通过get方法获得该成员
String i=m.getId();
double p=m.getPay();
int b=m.getBonus();
double q=p+b;
System.out.println("name="+n+"id="+i+"工资="+q);
}
};