#java #inheritance
#java #наследование
Вопрос:
@Override
public JComponent createControlPanel() {
super.createControlPanel();
panel.add(new JLabel("Brain:"));
brainMode = new JCheckBox("Brain active");
panel.add(brainMode);
}
public JComponent createControlPanel() {
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
}
Здесь я пытаюсь переопределить метод createControlPanel() в суперклассе. У суперкласса есть переменная ‘panel’, которая уже была объявлена, но, похоже, ее здесь не видно. Что мне следует сделать, чтобы я мог использовать переменные, объявленные в суперклассе?
Комментарии:
1. Вы хотите сказать, что суперкласс объявляет метод как
public JComponent createControlPanel(JPanel panel)
? Если это так, то ваш метод должен иметь тот же параметр, иначе это не переопределение , и вы просто передадите этот параметр вsuper
вызове.2. Нет, метод суперкласса
public JComponent createControlPanel()
. panel — это переменная, объявленная в суперклассе, которую я хотел бы использовать в своем подклассе. В основном это панель, к которой я хочу добавить дополнительные кнопки.3. Поскольку мы не знаем суперкласса, вам трудно помочь. Является
panel
ли переменная поля или локальной переменной или какой-либо другой переменной? Если поле, является ли оноpublic
,private
,protected
, или package-private ? Еслиprivate
естьgetPanel()
метод? КакоеJComponent
возвращаемое значение? Судя по имени метода, я бы предположил, что это panel , и в этом случае вы просто присваиваете возвращаемое значение локальной переменной, используете его, а затем возвращаете его в конце, часть, которую вы пропускаете (возвращаетеJComponent
объект).4. Я частично добавил (поскольку он очень длинный), как выглядит суперкласс
5. Извините, я отредактировал комментарий, добавив больше вопросов. В частности: каково возвращаемое значение? В обоих методах-заглушках отсутствует
return
оператор. Если у суперкласса естьreturn panel;
, значит, он у вас уже есть, вы просто забыли захватить возвращаемое значение изsuper
вызова.