请问这段代码是否正确?

时间:2014-03-19 05:55:56

标签: java

我正在通过以下两本书来学习java,如果有人能帮助我理解我所看到的并且无法理解的几行,我将不胜感激。

假设我有课程:

  1. 员工(抽象类)
  2. 经理(员工子类)
  3. 服务器(员工子类)
  4. 餐厅
  5. 非常好"餐厅"将需要"经理"和"服务器"。我看过这样编写的代码,想知道这是否有效。我也按照我学到的方式编写了相同的代码。请在底部看到该代码。

    public Class Restaurant{
    
       private Employee Manager;   //I DON'T UNDERSTAND THIS
       private Employee Server;    //I DON'T UNDERSTAND THIS
    
    
       public Restaurant(){
    
            //I DON"T UNDERSTAND THIS
            Manager = new Manager();
            Server = new Server();
       }
    }
    

    这就是我学会编码的方式:

    public Class Restaurant{
    
       private Manager _mgr;
       private Server _server;
    
    
       public Restaurant(){
    
            _mgr = new Manager();
            _server = new Server();
       }
    }
    

4 个答案:

答案 0 :(得分:2)

我猜你的Manager和Server类的定义类如下,

class Manager extends Employee {

}

class Server extends Employee {

}

在这种情况下,类管理器是一种Manager和Employee,也与Server一样。它是OOP的继承和多态。阅读herehere。你的第二个代码和第一个代码都是正确的。我们使用它的方式取决于。

答案 1 :(得分:0)

我可以理解这种混乱,因为你在第一个例子中实际看到的是一个Employee类型的对象,它实际上是名为Manager(它是子类的文字名称)。

所以回答你的问题(虽然我注意到你的问题中明显缺少问题和/或问号),是的,它是有效的。由于Manager是Employee,Server是Employee,因此它们只有两个Employee对象,其名称可以澄清它们应该是什么。

在该示例中,实际上在语法上是正确的

Manager = new Server();

但这显然违反了变量'名。

答案 2 :(得分:0)

public Class Restaurant{

   private Employee Manager;   //
   private Employee Server;    //


   public Restaurant(){

        //I DON"T UNDERSTAND THIS
        Manager = new Manager();
        Server = new Server();
   }
}

class Manager extends Employee{

}

class Server extends Employee{
}

现在,由于Employee是经理和服务器的超级类,我们可以说"每个员工都是经理,每个服务器都是经理"。

Employee e = new Manager(); // is like "Pointing to a manager and saying that he is an employee. Which is correct. 

实际对象在运行时确定。 请记住,并非"服务/经理"的所有方法/属性。可以使用Employee引用访问class。

答案 3 :(得分:0)

通过答案详细讨论了代码的结构。但是代码详细说明的一件事是part does not exist without whole,它被称为组合。它与强关联has a关系。其他是part can exist without whole的聚合。

<强>组合物

public Class Restaurant{

   private Employee Manager;   //
   private Employee Server;    //


   public Restaurant(){

        //I DON"T UNDERSTAND THIS
        Manager = new Manager();
        Server = new Server();
   }
}

聚合

public Class Restaurant{

   private Employee Manager;   //
   private Employee Server;    //


   public Restaurant(){
   }

   public setManager (){

        Manager = new Manager();
   }
   public setServer (){

    Server = new Server();
   }

}