2.类与对象 拜访对象村

2023-10-04 12:04
文章标签 对象 拜访

本文主要是介绍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.类与对象 拜访对象村的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/2033

相关文章

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

Java实现将byte[]转换为File对象

《Java实现将byte[]转换为File对象》这篇文章将通过一个简单的例子为大家演示Java如何实现byte[]转换为File对象,并将其上传到外部服务器,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言1. 问题背景2. 环境准备3. 实现步骤3.1 从 URL 获取图片字节数据3.2 将字节数组

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C

SpringBoot实现导出复杂对象到Excel文件

《SpringBoot实现导出复杂对象到Excel文件》这篇文章主要为大家详细介绍了如何使用Hutool和EasyExcel两种方式来实现在SpringBoot项目中导出复杂对象到Excel文件,需要... 在Spring Boot项目中导出复杂对象到Excel文件,可以利用Hutool或EasyExcel

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

Java对象和JSON字符串之间的转换方法(全网最清晰)

《Java对象和JSON字符串之间的转换方法(全网最清晰)》:本文主要介绍如何在Java中使用Jackson库将对象转换为JSON字符串,并提供了一个简单的工具类示例,该工具类支持基本的转换功能,... 目录前言1. 引入 Jackson 依赖2. 创建 jsON 工具类3. 使用示例转换 Java 对象为

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行