我正在学习Java,现在我已经超过了包裹驼峰,事情进展顺利。我可以用我已经知道的事物来学习大多数事物之间的相似之处,至少我已经知道了。但是接下来的代码究竟是怎么回事呢?它是某种形式的构造函数,还是匿名对象?
Something obj = new Something()
{
private static final int num = 3;
public void meth()
{
// w/e
}
};
答案 0 :(得分:6)
你知道了 - 这会创建一个Something
的匿名内部类。
答案 1 :(得分:2)
/**
* Notice there's only one thing in this that isn't defined:
* It still needs public abstract void triggerEvent();
*/
public abstract static class TopButton extends JPanel implements MouseListener {
protected ButtonPanel parent;
private String text;
public TopButton(ButtonPanel bp, String text) { parent = bp; this.text = text; addMouseListener(this); }
public void mouseClicked(MouseEvent e) { triggerEvent(); }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
public abstract void triggerEvent();
public void paintComponent(Graphics g) {
super.paintComponent(g);
Color oldColor = g.getColor();
Font oldFont = g.getFont();
Font newFont = new Font(oldFont.getName(),oldFont.getStyle(),oldFont.getSize());
g.setFont(newFont);
g.setColor(Color.black);
g.drawString(text, 20, 20);
g.setFont(oldFont);
g.setColor(oldColor);
}
}
现在,当我实际定义我的按钮时,我会这样做。通过提供它所需的一条线,唯一能使它与其他线不同的线。现在我可以为每个文件创建一个新文件,并为每个文件定义一个新类。这更简单。
private static void loadButtonPanelButtons() {
/* This button should tell the parent to bring up the save screen */
TopButton save = new TopButton(buttonPanel,"Save") {
public void triggerEvent() { parent.triggerSave(); }
};
save.setBorder(LineBorder.createBlackLineBorder());
buttonPanel.add(save);
/* This button should tell the parent to bring up the load screen */
TopButton load = new TopButton(buttonPanel,"Load") {
public void triggerEvent() { parent.triggerLoad(); }
};
load.setBorder(LineBorder.createBlackLineBorder());
buttonPanel.add(load);
TopButton addTile = new TopButton(buttonPanel,"Add Tile") {
public void triggerEvent() { parent.triggerAddTile(); }
};
addTile.setBorder(LineBorder.createBlackLineBorder());
buttonPanel.add(addTile);
TopButton saveTiles = new TopButton(buttonPanel,"Save Tiles") {
public void triggerEvent() { parent.triggerStyleSave(); }
};
saveTiles.setBorder(LineBorder.createBlackLineBorder());
buttonPanel.add(saveTiles);
}
现在,当我处理按下的按钮时,请记住TopButton的定义......有
public void mouseClicked(MouseEvent e) { triggerEvent(); }
我们知道最终会定义triggerEvent()
。我们可以在每个按钮的基础上定义它,当单击面板时,无论我们将triggerEvent()
定义为什么,它都会被调用。
答案 2 :(得分:1)
这样的构造创建了一个类的匿名内部类,在该类中执行此构造,并从Something(不是Something的内部类)派生。
我们的想法是快速提供抽象类,接口或覆盖类的某些功能的实现。
(new Thread(){public void run(){System.out.println(“在另一个线程上执行”);}})。start();