**面向对象的编程
————对象间的交互
-
对于一个简单的测试用的java程序,其基本主体可以在main()中进行,然而要运行真正的Java程序,就需要进行对象之间的交互,简单的对象间的交互,需要用不同的实例变量来表示对象,并且相互调用彼此之间的方法。
-
下面以一个简单的例子来说明:
这里有一个小游戏:游戏规定一个0~9以内的整数,由三个玩家每人猜测这个数字。答对者则是赢家,否则就在比一轮。 -
那么根据游戏规则,我们可以构造出两个对象,玩家和这个游戏。那么我们就需要3个类,一个类表示玩家(player),一个类代表这个游戏(GuessGame),一个类用来开始游戏(GameStart)(包含main方法,程序的入口)。
-
我们在player类里设立guess方法,让玩家随机猜测一个0~9之间的数字,再在GuessGame类中调用这个方法。那么我们就需要在GuessGame类中用3个实例变量player 1 player 2 player 3来表示这3个对象(玩家)。游戏主体的规则方法在GuessGame类中,而我们会在GameStart类中建立关于GuessGame的对象并调用这些方法。
-
以下是大概的代码
```public class player { //定义一个player类,包含一个猜测数字的方法
int number = 0;
public void guess (){
number = (int)(Math.random()*10);
System.out.println("I'm guessing "+number);
}
}
==========================================
public class GuessGame{
player p1;//用3个实例变量表示3个类player的对象
player p2;
player p3;
public void startGame(){
p1 = new player();//这里创建了三个player类的对象
p2 = new player();
p3 = new player();
int guessp1 = 0;
int guessp2 = 0;
int guessp3 = 0;
boolean p1isright = false;
boolean p2isright = false;
boolean p3isright = false;
int targetNumber = (int)(Math.random()*10);
System.out.println("I'thinking of a number between 0 and 9 ...");
while(true){
System.out.println("Number to guess is "+targetNumber);
p1.guess(); //这里分别调用了类player的guess方法,得到的结果分别保存在三个对象的实例变量里,也就是之前player类中定义的number变量
p2.guess();
p3.guess();
guessp1 = p1.number;//这里开始取出3个对象的所猜测的数字并将其列出
System.out.println("player one guessed"+ guessp1);
guessp2 = p2.number;
System.out.println("player two guessed"+ guessp2);
guessp2 = p3.nuimber;
System.out.println("player three guessed"+ guessp3);
if (guessp1 == targetNumber){
p1isright = true;
}
if (guessp2 == targetNumber){
p2isright = true;
}
if (guessp3 == targetNumber){
p3isright = true;
}
if(p1isright||p2isright||p3isright){ // 如果有人猜对了就出现赢家,否则就再比一局
System.out.println("We have a winner!");
System.out.println("Player one got it right ?"+ p1isright);
System.out.println("Player two got it right ?"+ p2isright);
System.out.println("Player three got it right ?"+ p3isright);
System.out.println("Game is over ");
break;
}else{
System.out.println("Player will have to try again.");
}
}
}
}
public class GameStart{//这里是主类,包含main方法,游戏从这里开始
public static void main (String [] args){
GuessGame game = new GuessGame();
game.startGame();
}
}
-
以上就涉及到了简单的对象之间的交互
-
2.Java中创建对象时,不管对象是如何创建的,它都会被保存在一个叫“堆”的内存区域中。而在java中的这个堆,是一个“垃圾回收堆”,Java会根据对象的大小来分配内存空间,如果java虚拟机察觉到对象不会再被使用时,就会启动“垃圾收集器”来回收空间,让空间能够被再次利用。
·要点
- 面向对象设计扩展功能不需要改动之前已经测试好的代码。
- 所有的java程序都定义在类之中
- 类如同蓝图描述该类型的对象要如何创建
- 对象自治,没有必要在意一个对象是如何完成它的工作的
- 对象包含有已知的事务,并能执行工作
- 创建类时,可能会需要创建独立,测试用的类
- 类可以继承自较为抽象的父类
- Java的程序在执行期内是一组会互相交谈的对象。
- Java程序是由一个组类所组成的,其中一个类带有启动整个程序的入口main方法
10.当需要创建的类的数量非常大,甚至达到成白上千个的时候,就需要包装起来(尚未知,待研究)