@ Переопределить мои собственные методы? - PullRequest
0 голосов
/ 02 марта 2011

У меня есть настройки, аналогичные тем, что вы видите ниже. Я только что заметил, что «YourClass» на самом деле реализует некоторые из моей логики из «MyClass». Тьфу. Я попытался бросить @Override выше setupViews () в «YourClass», но он не скомпилирует, заявив: «Метод setupViews () типа DataManagerActivity должен переопределить метод суперкласса»

Код изменен. Это был пример. Я просто набрал не ту вещь. Тот же вопрос. Как я могу сохранить YourClass, который расширяет MyClass от реализации setupViews () из MyClass?

public class MyClass extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        setupViews();
        ...

    }

    private void setupViews() {

        ....

    }
}



public class YourClass extends MyClass {

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        setupViews();
        ...

    }

    private void setupViews() {

        ....

    }
}

Ответы [ 2 ]

2 голосов
/ 02 марта 2011

@Override указывает, что компилятор завершится с ошибкой, если только метод под ним не переопределит метод в суперклассе (тот, из которого вы extend) или один из interface, которые он реализует.

Редактировать: извините, возможно, я неправильно понял, что вы имели в виду. Причина, по которой вы не можете переопределить setupViews(), заключается в том, что он private в MyClass, так что вы не можете получить доступ или переопределить его из любых подклассов.

Если это то, что вам нужно, то вы хотите, чтобы ваш метод был protected - как, доступный и переопределяемый в подклассах класса, в котором он определен, но недоступен извне.

Редактировать 2 ': итак нижняя строка:

Если вы хотите, чтобы setupViews() можно было переопределять в подклассах (например, YourClass), сделайте его protected. В противном случае, сделайте это private.

1 голос
/ 07 марта 2011

Я думаю, что вы хотите использовать this.setupViews();

...