重写给定类以使用组合而不是继承 //图9.8:BasePlusCommissionEmployee.java //无法在子类中访问私有超类成员。 公共类BasePlusCommissionEmployee扩展CommissionEmployee { 私人双底薪;//每周底薪 //六参数构造函数 public BasePlusCommissionEmployee(先字符串,后字符串, 字符串ssn,双销售额,双费率,双工资) { //对超类CommissionEmployee构造函数的显式调用 超级(第一、最后、ssn、销售额、费率); setBaseSalary(salary);//验证并存储基本工资 }//结束六个参数BasePlusCommissionEmployee构造函数 //设定基本工资 公共收入(双薪) { 基本工资=(工资
我不知道从哪里开始。我理解,组合是一种“has-a”关系,继承是一种“is-a”。我是否必须使用类中的类来重写这段代码?不一定。首先考虑接口,甚至一些示例代码。你有一个雇员;该员工“有”基本工资和佣金。这两种情况都可能比员工的SSAN发生更频繁的变化,因此他们有理由单独作为班级进行培训 现在您有了三个类(这不是有意使用Java表示法的): 在某个地方,你会有重写给定类以使用组合而不是继承 //图9.8:BasePlusCommissionEmployee.java //无法在子类中访问私有超类成员。 公共类BasePlusCommissionEmployee扩展CommissionEmployee { 私人双底薪;//每周底薪 //六参数构造函数 public BasePlusCommissionEmployee(先字符串,后字符串, 字符串ssn,双销售额,双费率,双工资) { //对超类CommissionEmployee构造函数的显式调用 超级(第一、最后、ssn、销售额、费率); setBaseSalary(salary);//验证并存储基本工资 }//结束六个参数BasePlusCommissionEmployee构造函数 //设定基本工资 公共收入(双薪) { 基本工资=(工资,java,inheritance,composition,Java,Inheritance,Composition,我不知道从哪里开始。我理解,组合是一种“has-a”关系,继承是一种“is-a”。我是否必须使用类中的类来重写这段代码?不一定。首先考虑接口,甚至一些示例代码。你有一个雇员;该员工“有”基本工资和佣金。这两种情况都可能比员工的SSAN发生更频繁的变化,因此他们有理由单独作为班级进行培训 现在您有了三个类(这不是有意使用Java表示法的): 在某个地方,你会有 class Employee ssan : SocialSecurityNumber // more classes I don
class Employee
ssan : SocialSecurityNumber // more classes I don't bother to define
base : BasePay
cmsn : Commission
public setBasePay(base:BasePay)
public getBasePay()
public setCommission(cmsn:Commission)
public getCommission()
... more stuff
end
class BasePay
rate: DollarsPerHour
public getPay(hr : Hours)
end
class Commission
rate : Pct
public getPay(sales : Dollars)
end
顺便说一句,我发现把这些事情想清楚是很有用的,好像我对大多数事情都有特殊的课程,比如美元每小时。你最终可以用类似“double”的东西来代替它,但是当你考虑它的时候,它有助于保留单位,防止你做一些事情,比如在小时数中增加美元“//set first name`这样的评论没有任何用处,只会把代码弄得乱七八糟。锿
class Employee
ssan : SocialSecurityNumber // more classes I don't bother to define
base : BasePay
cmsn : Commission
public setBasePay(base:BasePay)
public getBasePay()
public setCommission(cmsn:Commission)
public getCommission()
... more stuff
end
class BasePay
rate: DollarsPerHour
public getPay(hr : Hours)
end
class Commission
rate : Pct
public getPay(sales : Dollars)
end
check.totalPay = employee.getBasePay().getPay(hrs) + // note thats an instance
employee.getCommision().getPay(totSales)