我在这里遇到了一个问题。我想从我的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
}
}
答案 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();
...
}
...
}