类与对象----拜访对象村
1.以对象来思考
当你在设计类时,要记得对象是靠类的模型塑造出来的。你可以这样看:
1)对象是已知的事物
2)对象会执行的动作
对象本身已知的事物被称为:实例变量。它们代表对象的状态(数据),且该类型的每一个对象都会独立的拥有一份该类型的值。
对象可以执行的动作被称为:方法。在设计类时,你也会设计出操作对象数据的方法。对象带有读取或操作实例变量的方法。
eg:闹钟对象会有个变量来保存响铃时间,且会有getTime()和setTime()这两个方法来存取该时间。
到底类与对象两者之间有什么不同?
1)类不是对象(却是用来创建它们的模型)
类是对象的蓝图。它会告诉虚拟机如何创建某种类型的对象。根据某类创建出的对象都会有自己的实例变量。
eg:你可以使用按钮类来创建出许多大小、颜色、文字等不同的按钮。
2)对象就好像通讯簿中的一笔数据
eg:通讯簿的每张卡片都有相同的空白字段(实例变量)。填入的新联系人就如同创建新的实例(对象),填入卡片的数据代表联络
人的状态。
2.创建对象
1)如何运用对象?
你需要两个类,一个是要被操作于对象的类,两一个是用来测试该类的类。测试用的类带有main并且你会在其中建立与存取被测的对象。
圆点运算符(.):此运算符能让你存取对象的状态与行为
Dog.java—操作类
public class Dog {
//实例变量
int size;
String bread;
String name;
//方法
void bark(){
System.out.println("Ruff! Ruff!");
}
}
DogTestDrive.java—测试类
public class DogTestDrive {
public static void main(String[] args) {
//建立Dog对象
Dog d = new Dog();
//获取该对象的变量
d.size = 40;
//调用它的方法
d.bark();
}
}
3.main()的两种用途
1)测试真正的类
2)启动你的Java应用程序
eg:猜数字游戏
程序逻辑:
(1)GameLanucher这个类带有main()方法,是应用程序的入口点;
(2)main()中会创建出GuessGame对象,并调用它的startGame()方法;
(3)startGame()方法是游戏的起点。它会创建3个player,然后挑出要猜测的随机数字。它会要求player猜测并检查结果,过程会被列出来。
GuessGame.java
public class GuessGame {
//表示3个Player对象
Player p1;
Player p2;
Player p3;
public void startGame(){
//创建出Player对象
p1 = new Player();
p2 = new Player();
p3 = new Player();
//声明3个变量来保存是否猜中
boolean p1isRight = false;
boolean p2isRight = false;
boolean p3isRight = false;
//声明3个变量来保存猜测的数字
int guessp1 = 0;
int guessp2 = 0;
int guessp3 = 0;
//产生谜底数字
int targetNumber = (int)(Math.random()*10);
System.out.println("I am thinking of a number between 0 and 9 ...");
while(true){
System.out.println("Number to guess is "+targetNumber);
p1.guess();
p2.guess();
p3.guess();
//取出每个Player所猜测的数字并将它列出
guessp1 = p1.number;
System.out.println("Player one guessed "+guessp1);
guessp1 = p2.number;
System.out.println("Player one guessed "+guessp2);
guessp1 = p3.number;
System.out.println("Player one 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 is right?"+p1isRight);
System.out.println("Player two got is right?"+p2isRight);
System.out.println("Player three got is right?"+p3isRight);
System.out.println("Game is over!");
//游戏结束,中止循环
break;
}else{
//都没有猜到,所以要继续下去
System.out.println("Players will have to try again.");
}
}
}
}
Player.java
public class Player {
//要被猜的数字
int number = 0;
public void guess() {
number = (int)(Math.random()*10);
System.out.println("I'm guessing "+number);
}
}
GameLauncher.java
public class GameLauncher {
public static void main(String[] args) {
GuessGame game = new GuessGame();
game.startGame();
}
}
4.要点
1)面向对象设计扩展功能不需要改动之前已经测试好的程序代码
2)所有的Java程序都定义在类中
3)类如同蓝图描述该类型的对象要如何创建
4)对象自治,你无需在意它如何完成任务
5)对象有已知的事物,并能执行工作
6)对象本身已知道的事物被称为实例变量,它代表对象的状态
7)对象可执行的动作称为方法,它代表对象的行为
8)创建类时,可能同时会需要创建独立、测试用的类。
9)类可以继承自较为抽象的类
10)Java的程序在执行期是一组会互相交谈的对象。