为什么在没有实例的情况下调用方法?

时间:2020-01-12 22:11:50

标签: java oop

对不起,也许很简单,但是我无法解释。有以下代码(摆动):

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()...怎么办?

我知道这是由于Frame继承引起的,但是怎么办?

3 个答案:

答案 0 :(得分:4)

所有这些调用都发生在实例的上下文中。如果您仅呼叫setSize,则与说this.setSize相同。 (如果您尝试以静态方法调用setSize,这特别意味着它未链接到特定实例,则将收到错误。)

答案 1 :(得分:0)

在构造扩展另一个类的类的实例时,会先调用父构造函数,设置它所需的任何内容,然后再调用本地构造函数(隐式地或通过调用ArrayList<List<Something>>构造函数的第一行)。

因此,由于console.log是-Post.updateOne({ _id: req.params.id }, { like , _id: req.params.id }) .then(() => res.status(201).json({ message: 'Great!'})) .catch(error => res.status(400).json({ error })); (扩展了类),因此super()的东西将在执行Sandbox2构造函数中的代码时准备就绪。

答案 2 :(得分:0)

SandBox2扩展了JFrame意味着SandBox2是-JFrame类。 SandBox2类从超类JFrame继承以下方法。因此可以称为add(b)

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

根据Doc,为方便起见,add及其变体removesetLayout已被覆盖以根据需要转发到contentPane。这意味着您可以编写:frame.add(child);

SandBox2使用继承,该类允许通过该继承来继承另一个类的功能(字段和方法)。除了超类的字段和方法之外,子类还可以添加自己的字段和方法。