繁体   English   中英

Java继承/构造函数

[英]Java inheritance/constructors

如果我使用的是“狗”类,并且扩展了“动物”类,那么有一种方法可以让构造函数使用带有动物对象的参数,然后要求我不要使用super关键字来存储信息。需要动物对象吗? 谢谢。

不,因为您想复制原始Animal 这是因为DogAnimal ,您不能传入另一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM