在另一个类的构造函数中传递Class类型?

时间:2014-03-13 02:49:22

标签: java polymorphism

如果标题不正确,请原谅我,我认为这个问题与“多态”有关,但不想让标题复杂化。

我正在学习Java并遵循“Java:学习编程”,随着我的进展,我正在应用这些知识并创建自己的方案来查看 如何应用“多态”。如果有人能帮我理解如何完成这项任务,我将不胜感激。我有三个班级:

  1. 抽象员工
  2. 经理(员工子类)
  3. 餐厅
  4. Employee类和Manager类非常简单。我正在努力创建一家餐厅,每家餐厅都有一位经理。我的问题是:

    我应该将“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”声明构造函数。我是否应该用结构声明“Manager”的实例而不是 请使用构造函数传递“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 个答案:

答案 0 :(得分:1)

这在一定程度上取决于品味以及你将如何对待这些物品。

如果您可能想要独立地参考经理,那么他们希望成为他们自己的对象而不是餐厅的属性。

由于餐厅本身不是经理,我建议它不应该在其构造函数中使用经理的属性,而应该将经理分配给它(在构造函数中或在一个setManager()调用)。

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