[英]Java inheritance/constructors
如果我使用的是“狗”类,并且扩展了“动物”类,那么有一种方法可以让构造函数使用带有动物对象的参数,然后要求我不要使用super关键字来存储信息。需要动物对象吗? 谢谢。
不,因为您想复制原始Animal
。 这是因为Dog
是Animal
,您不能传入另一个Animal
并使其成为新对象的“父”。
您应该执行的方法是在父类(Animal)中创建一个复制构造函数,该复制构造函数接受相同类型的对象。
public Animal(Animal other) {
this.field1 = other.field1;
this.field2 = other.field2;
...
}
然后在您的Dog
课程中,您可以执行以下操作:
public Dog(Dog other) {
super(other);
this.breed = other.breed;
...
}
不是自动的,不。
现在Animal
本身可能具有(用户创建的)“复制构造函数”样式的构造函数,该构造函数采用Animal
实例并从中复制字段,您可以将Animal
对象传递给此构造函数以执行所需的操作。
如果我使用的是“狗”类
class Dog {
}
它扩展了一个叫做“动物”的类
class Animal {
}
class Dog extends Animal {
}
有没有办法让构造函数
class Dog extends Animal {
Dog() {
}
}
使用带有动物对象的参数
class Dog extends Animal {
Dog(Animal otherAnimal) {
}
}
然后要求我不要使用
super
关键字
上面的代码中不使用super
关键字↑↑↑↑
存储动物对象所需的信息?
class Dog extends Animal {
Animal otherAnimal;
Dog(Animal otherAnimal) {
this.otherAnimal = otherAnimal;
}
}
信息已存储,仍然没有使用super
关键字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.