我在这里使用超类构造函数调用是否必要?

drs*_*drs 0 java oop inheritance constructor

我是Java的新手,仍然通过面向对象的设计和编程实践基础知识.我有一些关于继承,对象创建和super()调用的正确用法的问题.

请考虑以下事项:

超类,

package pet

public class Dog {

    private String foodDogEats;

    public Dog() {
        this.foodDogEats;
    }

    public String getDogFood() {
        return foodDogEats;
    }

    public void setDogFood() {
        foodDogEats = "kibble";
    }

}
Run Code Online (Sandbox Code Playgroud)

子类,

package pet

public class Fido extends Dog {

    public Fido() {
        super();
        Dog dog = New Dog();
        this.whatDoesFidoEat();
    }

    public whatDoesFidoEat(Dog dog) {
        System.out.println("Fido eats " + dog.getDogFood());
    }

}
Run Code Online (Sandbox Code Playgroud)

和控制器.

package pet

public class MyDogFido {

    public void MyDogFido() {
        Fido fido = new Fido();
    }

}
Run Code Online (Sandbox Code Playgroud)

此示例中的对象是,实例化一个新Fido对象,并在此过程中执行打印行为whatDoesFidoEat().我有几个问题 -

由于我已经在调用一个新Fido对象(这是一个扩展Dog,如果我还记得正确地继承了它的方法和变量),Dog那么Fido()构造函数中新对象的实例化是多余的?

使用怎么样super()

哪个是正确的行为 - 实例化Dog对象Fido(),调用super()或两者?

我最初在控制类中使用两者编写了一些类似的代码.写完这个问题之后,我的直觉告诉我,我应该只打电话super().

随意评论我的示例代码(特别this.foodDogEats;Dog()构造函数中的行- 也不确定那里的用法).

谢谢!

Sam*_*Sam 7

Dog dog = new Dog();条线是多余的,你是对的.它会创建第二个完全独立的Dog对象.

super()呼叫也是不必要的.super()除非通过调用不同的超级构造函数来覆盖该行为,否则所有Java构造函数都会隐式调用.