【发布时间】:2018-03-18 04:13:34
【问题描述】:
我有一个小任务,使用 OOP 方法添加和显示工作中不同类型的员工(不同部门)以及不同的薪水和福利。我不太确定我的代码在代码重用方面是否正确以及我是否真的符合 OOP 编码方法......到目前为止,我已经为每个类型/部门显示了 1 名员工,我将它们作为类名。(请参阅下面的代码)。我的问题是,如果我添加一个新员工,我将再次声明另一个 Employee 类型的对象。如果有很多员工,我就会有很多东西。我该如何减少这种情况,我是否可以知道我的 OOP 编码方法到目前为止是否正确?非常喜欢!这是我的代码:
//this is my parent class which implements an interface...
public abstract class Employees implements ICompensation{
private String fname;
private String lname;
private char gender;
private String address;
private double salary;
public String getfname(){
return this.fname;
}
public void setfname(String fname){
this.fname = fname;
}
public String getLname() {
return lname;
}
public void setLname(String lname) {
this.lname = lname;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
// this is a Developer type of employee
public class Developer extends Employees{
public Developer(String fname,String lname, char gender,String address, double salary){
setfname(fname);
setLname(lname);
setGender(gender);
setAddress(address);
setSalary(salary);
}
@Override
public double calculateSalary() {
double salary = getSalary();
salary += 10;
return salary;
}
@Override
public void print() {
System.out.println(this.getClass());
System.out.println(this.getfname());
System.out.println(this.getLname());
System.out.println(this.getGender());
System.out.println(this.getAddress());
System.out.println(this.calculateSalary());}}
//this is QA type of employee
public class QA extends Employees{
public QA(String fname,String lname,char gender,String address,double salary) {
setfname(fname);
setLname(lname);
setGender(gender);
setAddress(address);
setSalary(salary);
}
@Override
public double calculateSalary() {
double salary = getSalary();
salary = salary + 20;
return salary;
}
@Override
public void print() {
System.out.println(this.getClass());
System.out.println(this.getfname());
System.out.println(this.getLname());
System.out.println(this.getGender());
System.out.println(this.getAddress());
System.out.println(this.calculateSalary());
}
}
我还有另外 2 个类,它们是 BA 和 Manager 类,但我不会在这里包括,因为它只是与另一个派生类具有相同的内容。
//so here is my Interface
public interface ICompensation {
double calculateSalary();
void print();
}
//and here is my main method.
import java.util.*;
public class main {
public static void main(String[] args){
Employees dev = new Developer("Janel","Logrono",'M',"Alabang",491);
Employees qa = new QA("juan","Sir",'M',"Taguig",1240);
Employees ba = new BA("pedro","Lyn",'F',"Taguig",1150);
Employees manager = new Manager("sebastian","rods",'M',"USA",555399);
ArrayList<Employees> ls = new ArrayList<>();
ls.add(dev);
ls.add(qa);
ls.add(ba);
ls.add(manager);
for(Employees e : ls){
e.print();
System.out.println();
}
}
}
如何在没有声明很多对象的情况下添加另一个员工,我可以知道我的 OOP 编码方法到目前为止是否正确,我认为这里有很多冗余代码,如何减少它?谢谢!
【问题讨论】:
-
"...添加另一个员工而不声明很多对象..." 您如何定义“很多”?你认为你到底有什么太多?
-
开发人员和 QA 之间有什么不同,以至于您需要不同的类来处理它?如果你需要处理一个看门人,你会喜欢实现一个新类的需要吗?还是首席执行官?当您的开发人员加入 QA 团队时会发生什么(可能只是一两周)?员工的“类型”更可能是员工类的字段,而不是类的层次结构(可能将其命名为“角色”或“职位”)
-
也许你想用
ls.add(new Developer("Janel","Logrono",'M',"Alabang",491));这样的东西来减少你的代码行数 -
@KevinAnderson 我将有很多对象类型的员工,比如员工 dev1,那么如果我要添加另一个我将声明另一个员工 dev2;这将变得太多权利
-
@S.Piller 那么这是否意味着我只有一个班级只有雇员(父班级)?
标签: java eclipse oop jakarta-ee