функция super () в JAVA - PullRequest
       39

функция super () в JAVA

7 голосов
/ 20 декабря 2008

Класс кнопок:

class SubmitButton extends JButton implements ActionListener {
    public SubmitButton(String title){
        super(title);
        ....

Где я это заявляю:

SubmitButton submit = new SubmitButton("Submit");
submit.setBounds(530+150, 200, 100, 25);

Как super (title) устанавливает заголовок String в заголовок кнопки? Как это сделать так же, как метод .setText () для обычных JButtons?

Другими словами, как вызов super () делал то же самое, что и .setText () как super () знает, как изменить заголовок? Является ли .setText () единственным методом в классе JButton, который принимает в качестве параметра строку?

Ответы [ 6 ]

23 голосов
/ 20 декабря 2008
  • SubmitButton расширяет JButton
  • JButton имеет конструктор, который может выглядеть следующим образом (упрощенно):

    public JButton(String title) {
        setText(title);
    }
    
  • SubmitBUtton имеет конструктор:

    public SubmitButton(String title) {
        super(title);
    }
    

Конструктор SubmitButton вызывает конструктор суперкласса (JButton), который, в свою очередь, вызывает setText. Теперь внутри JButton может работать по-другому, но эффект тот же.

В целом, super (...) вызывает конструктор суперкласса.

7 голосов
/ 20 декабря 2008

JButton - это центральный класс Java Swing, который поддерживает несколько конструкторов. Один из этих конструкторов позволяет установить текст для метки кнопки.

Добавление super (title) фактически не вызывало вызов - конструктор родителя в любом случае был бы вызван, но это помогло выбрать, какой конструктор вызывается.

Операция setText () позволяет изменить текст после создания кнопки, но (обычно) до ее отображения.

4 голосов
/ 20 декабря 2008

Когда SubmitButton инициализируется конструктором SubmitButton (заголовок String), вы вызываете конструктор родительского / суперкласса с заголовком. Если вы не указали super (title), то компилятор Java автоматически вставит код для вызова конструктора по умолчанию для суперкласса. Тогда заголовок не будет установлен при создании SubmitButton.

Кроме того, суперкласс (JButton) может использовать .setText (string) в своем конструкторе, и поэтому он выполняет ту же функцию (необходимо посмотреть на фактический источник Java).

http://www.javaworld.com/jw-10-2000/jw-1013-constructors.html?page=2
http://leepoint.net/notes-java/oop/constructors/constructor.html

2 голосов
/ 20 декабря 2008

Во всех случаях в Java этот "вызов" к super() вызывает ctor родительского класса. Как и все функции, когда вы вызываете ctor, шаблон Java соответствует типу имени и параметра. JButton объявляет ctor со строковым аргументом, поэтому при вызове super(title) эффект заключается в том, что вы вызываете конструктор для непосредственного суперкласса (JButton), который принимает один строковый аргумент.

1 голос
/ 20 декабря 2008

http://java.sun.com/javase/6/docs/api/javax/swing/JButton.html#JButton(java.lang.String)

(скопируйте и вставьте весь URL; по какой-то причине часть String не связана)

Он вызывает конструктор, определенный в связанном выше классе JButton, который устанавливает текст кнопки в передаваемую строку. Super () - это вызов конструктора суперкласса.

0 голосов
/ 14 декабря 2015

Я лично решил эту проблему, установив заголовок, а не текст.

static String TitleName = "Некоторый заголовок"; супер (TitleName);

Затем нажмите на кнопку или где-либо действие должно происходить.

setTitle ("Новый заголовок");

Это работает для меня. : -)

...