2017-09-22 162 views
0

如果我使用的是一个名为“Dog”的类,它扩展了一个名为“Animal”的类,有没有办法让构造函数使用一个带有Animal对象的参数,然后会要求我不要使用超级关键字来存储Animal对象所需的信息?谢谢。Java继承/构造函数

回答

0

不,因为您想复制原始Animal。这是因为DogAnimal,您不能传入另一个Animal并将其作为新对象的“父”。

你应该这样做的方式是在你的父类(动物)中创建一个复制构造函数,该构造函数接受相同类型的对象。

public Animal(Animal other) { 
    this.field1 = other.field1; 
    this.field2 = other.field2; 
    ... 
} 

然后在您的Dog类,你可以这样做:

public Dog(Dog other) { 
    super(other); 
    this.breed = other.breed; 
    ... 
} 
+0

感谢您的信息! – Cresyls

+0

很高兴我帮助了!如果这是答案,随时标记为:) – ACVM

0

不能自动,没有。

现在Animal本身可能有(用户创建)“拷贝构造函数”风格的构造函数的Animal实例,并从中复制领域,你可以在Animal对象传递给此构造函数做你想做的。

0

如果我使用的是所谓的 “狗” 类

class Dog { 
} 

和它扩展了一个名为 “动物” 类

class Animal { 
} 
class Dog extends Animal { 
} 

是有方式有建设者

class Dog extends Animal { 
    Dog() { 
    } 
} 

时使用的参数是需要一个Animal对象

class Dog extends Animal { 
    Dog(Animal otherAnimal) { 
    } 
} 

,然后要求我不要用super关键字

↑↑↑↑没有使用super关键字以上代码↑↑↑↑

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

class Dog extends Animal { 
    Animal otherAnimal; 
    Dog(Animal otherAnimal) { 
     this.otherAnimal = otherAnimal; 
    } 
} 

信息存储,仍然没有使用super关键字。

+0

不是我的意思,但感谢张贴 – Cresyls

+1

@Cresyls这完全回答你的问题,其错误是,这不是你的意思? – Oleg

+0

@Oleg我知道这是我的错,因为没有正确解释它,它可能会在技术上回答我的问题,但它不会在同一时间 – Cresyls