Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么创建一种类型的引用变量,但将其分配给另一种类型?_Java_Oop - Fatal编程技术网

Java 为什么创建一种类型的引用变量,但将其分配给另一种类型?

Java 为什么创建一种类型的引用变量,但将其分配给另一种类型?,java,oop,Java,Oop,因此,在我观看的一个Java教程中,我遇到了以下代码行: Animal mutt = new Dog(); 其中Dog扩展Animal。这一行工作,创建一个类型动物变量引用狗的实例。但我想知道,我们不能改成这样吗 Dog mutt = new Dog(); 谢谢,我希望你能说明这一点。是的,两者都可以。但有时在某些情况下,您需要对多个类型进行操作。我用一个例子来解释它更容易 public void wash(Animal animal) { /* Happy Washing */ } 如果

因此,在我观看的一个Java教程中,我遇到了以下代码行:

Animal mutt = new Dog();
其中
Dog
扩展
Animal
。这一行工作,创建一个类型动物变量引用狗的实例。但我想知道,我们不能改成这样吗

Dog mutt = new Dog();

谢谢,我希望你能说明这一点。

是的,两者都可以。但有时在某些情况下,您需要对多个类型进行操作。我用一个例子来解释它更容易

public void wash(Animal animal) { /* Happy Washing */ }
如果你只能洗狗而不能洗猫,那么你可以直接用狗。但当你也可以洗猫的时候,你应该用动物来代替

这被称为liskov替换原理[1],是固体Idom[2]的一部分

  • [1]
  • [2]