我正在通过以下两本书来学习java,如果有人能帮助我理解我所看到的并且无法理解的几行,我将不胜感激。
假设我有课程:
非常好"餐厅"将需要"经理"和"服务器"。我看过这样编写的代码,想知道这是否有效。我也按照我学到的方式编写了相同的代码。请在底部看到该代码。
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();
}
}
答案 0 :(得分:2)
我猜你的Manager和Server类的定义类如下,
class Manager extends Employee {
}
class Server extends Employee {
}
在这种情况下,类管理器是一种Manager和Employee,也与Server一样。它是OOP的继承和多态。阅读here和here。你的第二个代码和第一个代码都是正确的。我们使用它的方式取决于。
答案 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();
}
}