我正在学习java,并且可以自己做很多编码而没有任何问题。但我一直在读书 - 在java中,对象通过调用其他对象的方法相互交互?
我不确定我是否明白这一点。示例就像是一个Robot
类,它有moveForward()
,comeToBase()
,increaseSpeed()
等方法。现在,如果有两个机器人对象,那么它们将如何相互作用避免冲突?我可以很好地理解每个机器人对象可以独立调用自己的方法并独立运行但是对象之间的交互是如何发生的?有人可以根据上面的例子来解释吗?
答案 0 :(得分:4)
对象通常通过使用引用来相互通信。例如:
class Robot {
private String m_name;
public void SetName(String name) {
m_name = name;
}
public String GetName() {
return m_name;
}
public void TalkTo(Robot robot, String speech){
console.writeline(robot.GetName + " says " + speech " to you.");
}
}
void MyMethod() {
Robot robotOne = new Robot(); // variable robotOne contains a reference to a robot
Robot robotTwo = new Robot(); // variable robotTwo contains a reference to another robot
robotTwo.SetName("Robert");
// the first robot says hi to the second
robotOne.TalkTo(robotTwo, "hello");
// output
// Robert says hello to you
}
答案 1 :(得分:0)
我会接受
在java中,对象通过调用其他对象的方法相互交互
表示RobotFleet对象包含许多Robot对象,可以通过Robot对象上的方法对它们进行操作。
答案 2 :(得分:0)
我认为@Richard Tingle是对的 - 两个Robot对象之间做出反应,有一个更高级别的类来控制它们,并处理移动它们,如果它们会碰撞怎么办是有道理的,根据某些条件增加速度等。
你可能有一个更高级别的类,主循环在每个循环上调用处理用户输入,物理定时,对象行为,对象冲突,渲染对象等的方法,直到整个场景结束并且控制权传递给代码的另一部分。因此,具有主循环的此类可以调用迭代所有Robot对象的方法,并调用Robot对象上的某些方法以确定如何基于当前物理建模环境进行响应。
类似级别的类将负责创建和初始化Robot对象,并通过系统传递控制来管理整个程序。您在Java中建模的所有内容都可以视为对象,甚至是更高级别的建模,例如游戏初始化和游戏流程管理。
一个非常基本的例子:
public class Game {
private List<Robot> robots = new ArrayList<Robot>();
private boolean GameEnded = false;
public static void main(String [ ] args) {
initiliaseGame();
startGameLoop();
System.exit(0);
}
private void initialiseGame() {
Robot robot1 = new Robot();
robots.add(robot1);
Robot robot2 = new Robot();
robots.add(robot2);
}
private void StartGameLoop() {
while (!gameEnded) {
/* would need time control logic here for more manageable and consistent simulation */
updateRobots(); // could check for collisions between other Robots here
drawRobots();
}
}
private updateRobots() {
for (Robot robot : robots) {
robot.update(); // do each robots behaviour (physics, decisions, etc)
}
}
private drawRobots() {
for (Robot robot : robots) {
robot.draw(); // draw each robot
}
}
}