2013-06-10 5 views
1

Я нашел несколько похожих тем, например here, но они не полностью ответили на мой вопрос. Вопрос очень прост:Java - Явный супер() в конструкторе подкласса

Можно ли назвать super() в конструкторе подкласса? Я знаю, конечно, что если я не сделаю это явно, компилятор сделает это для меня, но я прошу только в контексте лучших практик. Считаете ли вы ссылкой super() в каждом конструкторе подкласса как «триумф формы над веществом»?

Я работаю с кодом, который содержит стратегии использования, поэтому я вижу, что для многих программистов это не имеет значения ... Для меня это не имеет значения, как сейчас, но, возможно, я должен его изменить .. .

+5

Вы ** должны ** сделать это, если суперкласс не имеет конструктора по умолчанию. Например: 'class Fruit {protected String flavor; публичный Фрукты (струнный аромат) {this.flavor = аромат; }} класс Apple расширяет Fruit {public Apple() {super ("sweet"); }} '. Off topic: 'super (« sweet »)' звучит забавно :). –

+0

Я никогда не использую пустой 'super()', потому что он просто избыточен, но, как говорит @LuiggiMendoza, 'super (...)' может быть необходимо. –

+0

Да, конечно. Но я имел в виду только ситуацию, в которой супер можно опустить. –

ответ

3

По моему мнению, явный вызов super() просто загрязняет код. По умолчанию супер() вызов изобретается именно для этой цели - сократить код. См. Источник библиотеки SE, super() почти никогда не используется, например

public HashMap(int initialCapacity, float loadFactor) { 
    if (initialCapacity < 0) 
    ... 
3

Хорошая практика? Позвоните, что необходимо для правильной инициализации вашего объекта.

public class Foo { 
    private String name; 
    public Foo() { this(""); } 
    public Foo(String n) { this.name = n; } 
} 

public class Bar extends Foo { 
    private int x; 
    public Bar(int y) { this("", y); } 
    public Bar(String n, int y) { 
     super(n); 
     this.x = y; 
    } 
} 
Смежные вопросы