Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
在java中省略父类属性_Java_Oop - Fatal编程技术网

在java中省略父类属性

在java中省略父类属性,java,oop,Java,Oop,我有两个java类: class Employee{ private name; private annualSalary; public Employee(String name, double annualSalary){ } } 及 有没有一种方法可以从继承的类中去掉annualSalary,即annualSalary=hourlySalary*200?默认情况下,创建HourlyEmployee类时。annualSalary的值将为空或设置为hourlySalary*20

我有两个java类:

class Employee{
  private name;
  private annualSalary;

 public Employee(String name, double annualSalary){

}
}


有没有一种方法可以从继承的类中去掉
annualSalary
,即annualSalary=hourlySalary*200?默认情况下,创建HourlyEmployee类时。annualSalary的值将为空或设置为hourlySalary*200。

删除
annualSalary
并将
hourlySalary*200
传递给超级类构造函数

public class HourlyEmployee extends Employee {

    private double hourlySalary;

    public HourlyEmployee(String name, double hourlySalary) {
        super(name, hourlySalary * 200);
        this.hourlySalary = hourlySalary;
    }
}

需要省略父类属性的代码称为。如果小时工没有年薪,则表示小时工的类不应从表示受薪员工的类继承


解决方案是根据具体情况将它们的公共部分提取到一个单独的类或几个不同的类中。在您当前设计的示例中,这两个类没有任何共同之处,我认为从继承开始没有任何意义。

您的类结构是错误的,因为并非所有员工都有年薪。从
Employee
中删除
annualSalary
,并创建两个子类:
HourlyEmployee
具有小时工资和
salaredemployee
具有年薪。如果需要,在
Employee
中引入一个抽象方法
getAnnualAlary
(并将
Employee
抽象化),并在两个子类中以不同的方式实现它

abstract class Employee {
    private String name;

    public Employee(String name) { ... }
    public abstract double getAnnualSalary();
}

class SalariedEmployee extends Employee {
    private double annualSalary;

    public SalariedEmployee(String name, double annualSalary) {
        super(name);
        this.annualSalary = annualSalary;
    }

    @Override
    public double getAnnualSalary() { return annualSalary; }
}

class HourlyEmployee extends Employee {
    private double hourlySalary;

    public HourlyEmployee(String name, double hourlySalary) {
        super(name);
        this.hourlySalary = hourlySalary;
    }

    @Override
    public double getAnnualSalary() { return 200 * hourlySalary; }
}

您可能还想探索使用接口来定义员工行为,而不是使用基类。

这是一件非常琐碎的事情,兄弟……不是一个好的解决方案。如果小时工的小时工资发生变化,年薪将变得不一致。@TedHopp同意。没有试图想出最好的解决方案,只是回答了OP的问题“设置为hourlySalary*200”
abstract class Employee {
    private String name;

    public Employee(String name) { ... }
    public abstract double getAnnualSalary();
}

class SalariedEmployee extends Employee {
    private double annualSalary;

    public SalariedEmployee(String name, double annualSalary) {
        super(name);
        this.annualSalary = annualSalary;
    }

    @Override
    public double getAnnualSalary() { return annualSalary; }
}

class HourlyEmployee extends Employee {
    private double hourlySalary;

    public HourlyEmployee(String name, double hourlySalary) {
        super(name);
        this.hourlySalary = hourlySalary;
    }

    @Override
    public double getAnnualSalary() { return 200 * hourlySalary; }
}