Java继承/构造函数

时间:2017-09-22 23:57:34

标签: java inheritance parameters constructor

如果我使用的是一个名为" Dog"它扩展了一个名为" Animal"有没有办法让构造函数使用一个带有Animal对象的参数,然后要求我不要使用super关键字来存储Animal对象所需的信息?感谢。

3 个答案:

答案 0 :(得分:0)

不,因为您要制作原始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;
    ...
}

答案 1 :(得分:0)

不自动,不。

现在Animal本身可能有一个(用户创建的)“复制构造函数”样式构造函数,该构造函数接受Animal实例并从中复制字段,您可以传递{{1}对象这个构造函数来做你想做的事。

答案 2 :(得分:0)

  

如果我使用的是名为“Dog”的课程

for (var i = 0; i <= 4; i++) {
    A_Inside_Bus_div[i].innerText = i + ". " + snapshot.child("0/A_Inside_Bus " + i).val();
    A_Inside_Bus_Comments_div[i].innerText = snapshot.child("0/A_Inside_Bus " + i + " Comments").val();
            }
  

它扩展了一个名为“Animal”的类

class Dog {
}
  

有没有办法让构造函数

class Animal {
}
class Dog extends Animal {
}
  

使用带有Animal对象的参数

class Dog extends Animal {
    Dog() {
    }
}
  

然后要求我不要使用class Dog extends Animal { Dog(Animal otherAnimal) { } } 关键字

↑↑↑↑在上面的代码中没有使用super关键字↑↑↑↑

  

存储Animal对象所需的信息吗?

super

存储了信息,但仍未使用class Dog extends Animal { Animal otherAnimal; Dog(Animal otherAnimal) { this.otherAnimal = otherAnimal; } } 关键字。