避免在构造函数中重复代码

Geo*_*ton 0 java constructor

我的Java代码看起来像这样:

public class Animal {
    Animal(String name) {
    // some code
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样的子类:

public class Dog extends Animal {
    Dog(String name) {
    // SAME code as Animal constructor
    }
}
Run Code Online (Sandbox Code Playgroud)

Dog和the Animal之间的唯一区别是Dog有一些方法可以覆盖超类.他们的构造函数具有完全相同的代码.我怎样才能避免这个重复的代码?我知道对象不能继承构造函数.

Dav*_*vid 6

如果构造函数是相同的,则不需要它Dog.您可以通过调用访问Animal构造函数.Dogsuper(name);

public class Animal {
    Animal(String name) {
    // some code
    }
}
Run Code Online (Sandbox Code Playgroud)

而在狗:

public class Dog {
    Dog(String name) {
        super(name);
    }
}
Run Code Online (Sandbox Code Playgroud)

值得注意的是,对超类构造函数的调用必须是构造函数中的第一行.但是在你打电话之后super(name)你可以继续做其他特定于狗的代码.

例如:

public class Dog {
    Dog(String name) {
        // You can't put any code here
        super(name);
        // But you can put other code here
    }
}
Run Code Online (Sandbox Code Playgroud)