假设以下情况:
Logger logger = new ConsoleLogger();
那不是
ConsoleLogger logger = new ConsoleLogger()
为什么左侧的名称与右侧的名称不同?
答案 0 :(得分:2)
在Java中,它称为Polymorphism。
orderByChild()
equalTo()
是Logger logger = new ConsoleLogger();
接受的类型。它可以是Logger
类型的任何对象或它的子类。因此,您会看到其他类型。
实际上,这意味着您可以定义如下内容:
logger
答案 1 :(得分:2)
Logger logger = new ConsoleLogger();
可能是一个字段声明(如果在方法的正文中找到,它也可以是局部变量声明,但类型表明它是在类级别的。)
此处Logger
是变量的类型 logger
。 new ConsoleLogger()
是我们用来初始化logger
的值。 ConsoleLogger
几乎可以肯定是Logger
的子类(如果是接口,则是实现Logger
的类)。
简而言之,您希望变量是最通用的类型,它仍然具有所有必需的方法。在这种情况下,您希望使用 logger
变量的代码不知道它正在记录到控制台。您只希望它使用Logger
类(或接口)提供的方法,而无需考虑具体实现是什么。