2014-03-13 74 views
0

如果标题不正确,请原谅我,我认为这个问题与“多态性”有关,但不想让标题复杂化。在另一个类的构造函数中传递一个类类型?

我正在学习Java并遵循“Java:Learn to Program”,随着我的进展,我正在应用这些知识并创建自己的场景以查看 如何应用“多态性”。如果有人能帮助我理解如何完成这项任务,我将不胜感激。我有三类:

  1. 摘要员工
  2. 经理(员工的子类)
  3. 餐厅

Employee类和管理类是非常直接的。我正在尝试创建一家餐厅,每家餐厅都有一名经理。我的问题是:

我应该将“Manager”类型作为“Restaurant”类的构造函数参数传入,还是在构造函数中实例化“Manager”对象?

public abstract class Employee{ 

    private String _empName; 
    private double _empSalary; 

    public Employee(string name, double salary){ 

     _empName = name; 
     _empSalary = salary; 
    } 

    public void setEmpName(String name){ 
     _empName = name; 
    } 

    public String getEmpName(){ 
     return _empName; 
    } 

    public void setEmpSalary(double salary){ 
     _empSalary = salary; 
    } 

    public double getEmpSalary(){ 
     return _empSalary; 
    } 
}//CLASS 


public class Manager{ 

    private double _yrsOfExp; 

    public Manager(String name, double salary, double experience){ 
     super(name, salary); 
     _yrsOfExp = experience; 
    } 

    public void setManagerExperience(double years){ 
     _yrsOfExp = years; 
    } 

    public double getManagerExperience(){ 
     return _yrsOfExp; 
    } 

}//CLASS 

这是我需要帮助的地方,我用“MANAGER TYPE”声明了构造函数。我应该用施工而不是 向施工人员传递“管理员类型”来声明“施工人员”的实例吗?

public class Restaurant{ 

    private Manager _manager; 
    private String _location; 

    //CONSTRUCTOR 1 
    //SHOULD I PURSUE IT THIS WAY OR 
    public Restaurant(Manager manager, String location){ 
     _manager = manager; 
     _location = location; 
    } 

    //CONSTRUCTOR 2 
    //SHOULD I DO IT THIS WAY? 
    public Restaurant(String name, double salary, double experience, String location){ 
     super(name, salary, experience); 
     _location = location; 
    } 

    public String toString(){ 
     String str = ""; 

     return str; 
    } 
}//CLASS 

回答

1

这在一定程度上是品味的问题,以及您将如何处理物体。

如果您可能想要单独提及经理,那么他们希望成为他们自己的对象而不是餐厅的属性。由于一个餐厅本身并不是经理,所以我建议它不应该在其构造函数中使用经理的属性,而应该为其分配一个经理(无论是在构造函数还是在setManager()调用中)。

除此之外,如果一位经理负责两家餐厅,那么这将更有意义。

+0

想想这样,你的餐厅有经理或你的餐厅有名字,工资和经验吗? –

+0

谢谢@keshlam。我倾向于我的第二个构造函数,并且我收集你的方法是第二个构造函数? – Combustion007

+0

我建议根据您提供给我们的最小数据作为第一选项。将经理视为一个对象,而不是餐厅的属性。 – keshlam

相关问题