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()构造函数中的行- 也不确定那里的用法).
谢谢!
这Dog dog = new Dog();条线是多余的,你是对的.它会创建第二个完全独立的Dog对象.
该super()呼叫也是不必要的.super()除非通过调用不同的超级构造函数来覆盖该行为,否则所有Java构造函数都会隐式调用.
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |