Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写给定类以使用组合而不是继承 //图9.8:BasePlusCommissionEmployee.java //无法在子类中访问私有超类成员。 公共类BasePlusCommissionEmployee扩展CommissionEmployee { 私人双底薪;//每周底薪 //六参数构造函数 public BasePlusCommissionEmployee(先字符串,后字符串, 字符串ssn,双销售额,双费率,双工资) { //对超类CommissionEmployee构造函数的显式调用 超级(第一、最后、ssn、销售额、费率); setBaseSalary(salary);//验证并存储基本工资 }//结束六个参数BasePlusCommissionEmployee构造函数 //设定基本工资 公共收入(双薪) { 基本工资=(工资_Java_Inheritance_Composition - Fatal编程技术网

重写给定类以使用组合而不是继承 //图9.8:BasePlusCommissionEmployee.java //无法在子类中访问私有超类成员。 公共类BasePlusCommissionEmployee扩展CommissionEmployee { 私人双底薪;//每周底薪 //六参数构造函数 public BasePlusCommissionEmployee(先字符串,后字符串, 字符串ssn,双销售额,双费率,双工资) { //对超类CommissionEmployee构造函数的显式调用 超级(第一、最后、ssn、销售额、费率); setBaseSalary(salary);//验证并存储基本工资 }//结束六个参数BasePlusCommissionEmployee构造函数 //设定基本工资 公共收入(双薪) { 基本工资=(工资

重写给定类以使用组合而不是继承 //图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

我不知道从哪里开始。我理解,组合是一种“has-a”关系,继承是一种“is-a”。我是否必须使用类中的类来重写这段代码?

不一定。首先考虑接口,甚至一些示例代码。你有一个雇员;该员工“有”基本工资和佣金。这两种情况都可能比员工的SSAN发生更频繁的变化,因此他们有理由单独作为班级进行培训

现在您有了三个类(这不是有意使用Java表示法的):

在某个地方,你会有

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)