如何控制子类从父类继承过来的private成员

/*

在学习毕向东老师的课程时,自己遇到的问题。
雇员示例:

需求:公司中程序员有姓名,工号,薪水,工作内容。
项目经理除了有姓名。工号,薪水,还有奖金,工作内容。
对给出的需求进行数据建模。
分析:
程序员
    属性:
    姓名     工号    薪水
    行为:工作
经理
    属性
    姓名     工号    薪水     奖金
    行为:工作
共性:
雇员:
    属性:
    姓名     工号    薪水
    行为:工作

*/
//描述上面的三类员工:

错误思路


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);
	}
};

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值