在没有实例化或扩展A类的情况下访问A类内部的方法?

时间:2015-06-20 16:51:07

标签: java

我在这里遇到了一个问题。我想从我的toggleTimer()类访问Elevators类中的方法Input。但是,我重新定义了public Elevators()以便它有参数,我认为这会导致问题。 我无法扩展或实例化类 Elevators 而不会导致 public Elevators()执行。有没有办法在不执行toggleTimer()的情况下访问方法public Elevators()

例如:当我尝试创建Elevators的新对象时:

Elevators e = new Elevators() e.toggleTimer()

但是,创建新的Elevators对象会导致public Elevators()运行,我不希望这种情况发生。

示例2:

public class Input **extends** Elevators {

如果不向Elevators添加相同的构造函数,我无法扩展public Input()类,我不想这样做。

我需要的是一种从另一个班级访问班级toggleTimer()中的Elevators方法而无需调用public Elevators()的方法。

Elevators上课:

public class Elevators extends JPanel {

boolean toggleTimer = true;
private int y = 0;
private int elevatorDirection = 1;
private Color fillColor;
private static Timer timer;

public Elevators(Color color, boolean goingDown) {
    fillColor = color;

    if (goingDown) {
        y = 0;
        elevatorDirection = 1;
    } else {
        y = getPreferredSize().height - 120;
        elevatorDirection = -1;
    }

    timer = new Timer(20, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            y += elevatorDirection;
            if (y + 120 > getHeight()) {
                y = getHeight() - 120;
                elevatorDirection *= -1;
            } else if (y < 0) {
                y = 0;
                elevatorDirection *= -1;
            }
            repaint();
        }
    });
    timer.start();
}

public void toggleTimer() { //I want to access this method without executing public Elevators()
    toggleTimer = !toggleTimer;
    if(toggleTimer) {
        timer.start();
    } else {
        timer.stop();
    }
}
}

Input上课:

public class Input {
boolean toggleElevatorButton = true;
JButton toggleElevators = new JButton("Click to stop elevators.");

public void changeToggleElevatorButton() {
    toggleElevatorButton = !toggleElevatorButton;
    toggleElevators.setText(toggleElevatorButton ? "Elevators enabled. Click to disable." : "Elevators disabled. Click to enable.");

toggleElevators(); //This is where I want to call the method from the Elevators class
}
}

2 个答案:

答案 0 :(得分:1)

是的,你可以!这就是static Java methods的用途!

只需将toggleTimer()方法设为静态,然后使用Elevators.toggleTimer()进行调用。

答案 1 :(得分:0)

好问题,你不想在这里使用继承。你实际上想要使用组合和静态。我建议改写如下:

public class Input{
   private Elevator elevator;
   ...
}


public Elevators(Color color, boolean goingDown) {
     public static void toggleTimer();
}

或者如果你想要更多OO你做一个Timer类,电梯有一个计时器,例如

public class Timer{
    public void toggle(){...}
   ...
}

public class Elevator{
    private Timer timer;

   public Elevators(Color color, boolean goingDown) {
      timer = new Timer();
      ...
   }
    ...
}