系列文章目录
一:上手
二:类和对象
前言
行百里者半九十
一、类与对象的不同
首先,类不是对象,类是用来创建对象的模型。
类是对象的蓝图。它会告诉虚拟机如何创建某种类型的对象。根据某类创建出的对象都会有自己的实例变量。举例来说,你可以使用按钮类来创建出许多大小、颜色、文字等不同的按钮。
也可以这么说,对象就是通讯簿中的一笔数据。通讯簿中的每张卡片都有相同的空白字段(实例变量),填入新的联络人就如同创建新的实例(对象)。卡片上类的方法就是你会对卡片做的事情,比如:getTel()、changeAddress()、deletCard()等
每张卡能执行相同的动作,但取出的结果应该是各自独立的。
比如举例一个电话簿类,我们可以设定编号、姓名和电话,并且可以执行查询tel和更改tel方法,然后我们创建两个对象分别是person1和person2,来进行不同的操作,以此来显示对象的相对独立性。
class telBook{ //创建一个通讯簿类
int id; //编号
String name; //姓名
String tel; //电话
void getTel(){ //查询tel方法
System.out.println(tel);
}
void changeTel(String newTel){ //更改tel方法
tel = newTel;
}
}
public class TelTest{
public static void main (String[] args){
//创建第一个对象person1
telBook person1 = new telBook();
person1.id = 1;
person1.name = "Tony";
person1.tel = "12138";
person1.getTel(); //执行查询方法
//创建第二个对象person2
telBook person2 = new telBook();
person2.id = 2;
person2.name = "Grace";
person2.tel = "18888";
person2.changeTel("12345");
person2.getTel(); //执行查询方法
}
}
执行结果:
二、对象与对象的交互
猜字游戏
class GuessGame {
Player p1;
Player p2;
Player p3;
public void startGame() {
p1 = new 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'm thinking of a number between 0 and 9...");
while(true){
System.out.println("Number to guess is " + targetNumber);
p1.guess();
p2.guess();
p3.guess();
guessp1 = p1.number;
System.out.println("Player one guessed " + guessp1);
guessp2 = p2.number;
System.out.println("Player two guessed " + guessp2);
guessp3 = p3.number;
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 over.");
break;
}else{
System.out.println("Player will have to try again.");
}
}
}
}
class Player{
int number = 0;
public void guess(){
number = (int)(Math.random() * 10);
System.out.println("I'm guessing " + number);
}
}
public class GameLauncher {
public static void main (String[] args){
GuessGame game = new GuessGame();
game.startGame();
}
}
我们通过在GuessGame类中定义game对象,然后通过GuessGame类startGame方法调用里面的Player类定义的对象p1、p2、p3进行一系列操作,运行结果不够美观,如下:
存在一个疑问
当我将所有类都定义成公共类,也就是public class时
编译会提醒我类是公共的,应该在以他类.java命名的文件中。
我照做,但是还存在无法找到类的情况。
问题:公共类怎么调用公共类?
三、总结
- 面向对象设计扩展功能不需要改动之前已经测试好的程序部分
- 所有的Java程序都定义在类中
- 类如同蓝图描述该类型的对象要如何创建
- 对象自治,你无需在意他如何完成任务
- 对象有已知的事物,并能执行工作
- 对象本身已知道的事物称为实例变量,他代表对象的状态
- 对象可执行的动作称为方法,他代表对象的行为
- 创建类时,可能会需要创建独立、测试用的类
- 类可以继承自较为抽象的父类