我最近正在学习Java,我来自PHP。
我有一个我不太了解的概念,因此,当您要创建该类的新实例时,据我所知,我们有一个称为(Animal)的父类和一个名为(Wolf)的子类。 (Wolf)例如,这是您编写的代码:

Wolf wolf1 = new Wolf();


但是在书中,我发现第二种方式也能获得相同的结果:

Animal wolf1 = new Wolf();


第二件事是当您有一个接口(让我们将其称为(myInterface))并且类(Wolf)正在实现它时,我发现了实例化该类(Wolf)的第三种方法:

myInterface wolf1 = new Wolf();


问题是:
为什么这样做有效?以及为什么要首先这样做呢?有没有一个简单的示例可以清楚地说明为什么您应该使用第二种和第三种方法来实例化您的班级?

最佳答案

这是面向对象编程的好处。如果您具有Animal类,并且Cat表示extends AnimalDog表示extends Animal,那么您可以编写较少重复的代码:

public void beAnnoying(Animal animal) {
    animal.makeSound();
}


至于为什么这工作?在现实生活中,您可以使用“ Is-A”关系进行继承。狗“ Is-A”动物,猫“ Is-A”动物。因此,如果所有ananals都能发出声音,那为什么不建立一种通用的方法呢?

编辑:因为我不能在评论中回答,所以我将在这里回答。如果要说Wolf wolf = new Wolf();然后再给该品种分配一只狗怎么办?您不能这样做(您必须创建另一个变量),但是如果您有Animal Wolf = new Wolf();,那么wolf = new Dog();可以正常工作。我确定还有其他不确定的原因。

09-10 21:58