Почему метод может быть вызван без экземпляра? - PullRequest
0 голосов
/ 13 января 2020

Извините, может быть, это просто, но я не могу этого объяснить. Есть следующий код (свинг):

public class Sandbox2 extends Frame implements ActionListener {  
    JTextField tf; JLabel l; JButton b;  

    Sandbox2() {  
        tf=new JTextField();  
        ...   

        //there is what i can`t understand
        add(b);add(tf);add(l);    
        setSize(400,400);  
        setLayout(null);  
        setVisible(true);  
    }

    public void actionPerformed(ActionEvent e) {  
        ... 
    }  

    public static void main(String[] args) {  
        new Sandbox2();  
    } 
}

Сначала я создаю кнопку, текстовое поле и другие, после чего добавляю их во фрейм. Но как это работает, если все методы, add (), setSize () ... были вызваны без экземпляра фрейма?

Я понимаю, что это связано с наследованием фреймов, но как?

Ответы [ 3 ]

4 голосов
/ 13 января 2020

Все эти вызовы происходят в контексте экземпляра. Если вы просто позвоните setSize, то это то же самое, что сказать this.setSize. (Если вы попытались вызвать setSize в методе stati c, что, в частности, означает, что он не связан с конкретным экземпляром c, вы получите ошибку.)

0 голосов
/ 13 января 2020

Класс SandBox2 расширяется JFrame означает SandBox2 is-a JFrame класс. Класс SandBox2 наследует следующие методы от суперкласса JFrame. Следовательно, можно назвать как add(b)

add(b);
add(tf);
add(l);    
setSize(400,400);  
setLayout(null);  
setVisible(true); 

Согласно Do c Для удобства add и его варианты remove и setLayout были переопределены переслать на панель содержимого при необходимости. Это означает, что вы можете написать: frame.add(child);

SandBox2 использует наследование, с помощью которого класс позволяет наследовать свойства (поля и методы) другого класса. Подкласс может добавлять свои собственные поля и методы в дополнение к полям и методам суперкласса.

0 голосов
/ 13 января 2020

Когда вы создаете экземпляр класса, который расширяет другой класс, родительский конструктор вызывается первым, устанавливая все, что ему нужно, перед вызовом локального конструктора (либо неявно, либо путем вызова super() в первой строке). вашего конструктора).

Итак, поскольку Sandbox2 is-a JFrame (расширяет класс), материал JFrame будет готов к тому времени, когда код в вашем конструкторе Sandbox2 будет выполнен ,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...