本文主要是介绍2.类与对象 拜访对象村,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2.1 椅子大战
在图形接口画出正方形、圆形与三角形。当用户选点图形时,图形需要顺时针转360°并依据形状的不同播放播放不同的AIF文件。胜者可以坐上名贵宝椅。
面向过程:
rotate(shapeNum) {//旋转360°
}
playSound(shapeNum) {//查询播放哪个AIF文件//播放
}
面向对象:
//Square类
rotate() {//code to rotate a square
}playSound() {//code to play the AIF file//for a square
}//Circle类
rotate() {//code to rotate a circle
}playSound() {//code to play the AIF file//for a circle
}//Triangle类
rotate() {//code to rotate a triangle
}playSound() {//code to play the AIF file//for a triangle
}
面向对象适应性与扩展性好,有时不需要动已经测试好的程序就可以达成新目标
添加amoeba,播放hif文件,绕着一端旋转。
面向过程:
rotate(shapeNum, xPt, yPt) {
//如果不是阿米巴//计算中心点//然后旋转
//否则//以xPt和yPt作为旋转中心//然后旋转
}
面向对象:加上旋转轴心点的属性(attribute)
//Amoeba类
int xPt
int yPt
rotate() {//使用阿米巴的x和y//执行旋转
}
playSound() {//播放
}
2.2 继承(inheritance)
1.找出4个类中共同的部分:
2.它们都是Shape,而且都有rotate与playSound,因此可以提取出新的类:
3.将4个形状体以称为继承的关系连接到Shape这个类:
这可称为“Square继承自Shape”,“Circle继承自Shape”等。rotate()与playSound()已经从次级的类中移开。
Shape是底下4个子类的父亲。次级类会继承上级类的方法。也就是说,子类会自动获得父类的功能。
2.3 覆盖(override)
Amoeba类可以覆盖Shape的方法,Java虚拟机知道在遇到Amoeba时使用不同的rotate()
覆盖:由子类重新定义继承下来的方法,以改变或延伸此方法的行为
4.让Amoeba类去覆盖rotate()与playSound()这两个父类的方法
2.4 什么是类?
设计类时,记得对象是靠类的模型塑造出来的:
- 对象是已知的事物
- 对象会执行的动作
对象本身已知的事物被称为:
- 实例变量(instance variable)
对象可以执行的动作称为:
- 方法(methods)
对象本身已知的事物称为实例变量,代表对象的状态(数据),且该类型的每一个对象都会独立的拥有一份该类型的值。
可以把对象当作实例。
对象可以执行的动作称为方法。设计类时,也会设计出操作对象数据的方法。对象带有读取或操作实例变量的方法是很常见的。如闹钟对象会有一个变量来保存响铃时间,且会有getTime()与setTime()两个方法来存取该时间。
对象带有实例变量和方法,它们都是类设计中的一部分。
类不是对象(却是用来创建它们的模型)。类是对象的蓝图,它会告诉虚拟机如何创建某种类型的对象,根据某类创建出的对象都会有自己的实例变量。如使用按钮类创建出许多大小、颜色、文字等不同的按钮。
对象就好像通讯录中的一笔数据。通讯簿的每张卡片都有相同的空白字段(实例变量)。填入新的联络人就如同创建新的实例(对象),填入卡片的数据代表联络人的状态。
这个卡片类上的方法就是你会对卡片作的事情:getTel()、changeAddress()、deleteCard()等。
所以每张卡能够执行相同的动作,但取出的结果应该是依每张卡片各自独立的。
2.5 创建你的第一个对象
运用对象需要两个类:一个是要被操作于对象的类(如Dog、AlarmClock和Television等),另一个是用来测试该类的类。测试用的类带有main()并且你会在其中建立与存取被测的对象。
本书后续章节的内容会有许多双类的范例。测试用的类会被命名为“受测类名称“+TestDrive。例如说要测试Bungee这个类,我们会作出一个带有main)的BungeeTestDrive。它会创建出Bungee的对象,并使用圆点(.)符号所代表的操作数来存取该对象的变量与方法。
圆点运算符(.)
此运算符能让你存取对象的状态与行为。
// 建立对象
Dog d =new Dog();
//通过操作和调用method
d.bark();
//通过操作数存取属性
d.size =40;
1.编写类
class Dog {int size;String breed;String name;void bark() {System.out.println("Ruff! Ruff!");}
}
2.编写测试用的类
class DogTestDrive {public static void main (String[] args) {//Dog测试码}
}
3.在测试用的类中建立对象并存取对象的变量和方法
class DogTestDrive {public static void main (String[] args) {Dog d = new Dog();d.size = 40;d.bark();}
}
创建与测试Movie对象:
public class Movie {String title;String genre;int rating;void playIt() {System.out.println("Playing the movie");}
}public class MovieTestDrive {public static void main(String[] args) {Movie one = new Movie();one.title = "Gone with the Stock";one.genre = "Tragic";one.rating = -2;Movie two = new Movie();two.title = "Lost in Cubicle Space";two.genre = "Comedy";two.rating = 5;two.playIt();Movie three = new Movie();three.title = "Byte Club";three.genre = "Tragic but ultimately uplifting";three.rating = 127;}
}
2.6 使用main()
main()的两种用途:
- 测试真正的类
- 启动你的Java程序
真正的Java程序只会让对象与对象交互,即互相调用方法。
2.7 猜数字
猜数字游戏
摘要:
这个游戏涉及到game与player两个对象。game会产生介于0~9之间的随机数字,而3个player对象会猜测该数字。
类:
GuessGame.class Player.class GameLauncher.class
程序逻辑:
(1) GameLauncher这个类带有main()方法,是应用程序的入口点。
(2)main()中会创建出GuessGame对象,并调用它的startGame()方法。
(3)startGame()方法是游戏的起点。它会创建3个player,然后挑出要猜测的随机数字。它会要求player猜测并检查结果,过程会被列出来。
public 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);break; //游戏结束,中止循环} else {//都没猜到,所以要继续下去System.out.println("Players will have to try again.");} //if/else结束} //循环结束} //方法结束
} //类结束
public 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();}
}
这篇关于2.类与对象 拜访对象村的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!