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

相关文章

Java第二阶段---09类和对象---第三节 构造方法

第三节 构造方法 1.概念 构造方法是一种特殊的方法,主要用于创建对象以及完成对象的属性初始化操作。构造方法不能被对象调用。 2.语法 //[]中内容可有可无 访问修饰符 类名([参数列表]){ } 3.示例 public class Car {     //车特征(属性)     public String name;//车名   可以直接拿来用 说明它有初始值     pu

HTML5自定义属性对象Dataset

原文转自HTML5自定义属性对象Dataset简介 一、html5 自定义属性介绍 之前翻译的“你必须知道的28个HTML5特征、窍门和技术”一文中对于HTML5中自定义合法属性data-已经做过些介绍,就是在HTML5中我们可以使用data-前缀设置我们需要的自定义属性,来进行一些数据的存放,例如我们要在一个文字按钮上存放相对应的id: <a href="javascript:" d

PHP7扩展开发之对象方式使用lib库

前言 上一篇文章,我们使用的是函数方式调用lib库。这篇文章我们将使用对象的方式调用lib库。调用代码如下: <?php $hello = new hello(); $result = $hello->get(); var_dump($result); ?> 我们将在扩展中实现hello类。hello类中将依赖lib库。 代码 基础代码 这个扩展,我们将在say扩展上增加相关代码。sa

hibernate修改数据库已有的对象【简化操作】

陈科肇 直接上代码: /*** 更新新的数据并并未修改旧的数据* @param oldEntity 数据库存在的实体* @param newEntity 更改后的实体* @throws IllegalAccessException * @throws IllegalArgumentException */public void updateNew(T oldEntity,T newEntity

类和对象的定义和调用演示(C++)

我习惯把类的定义放在头文件中 Student.h #define _CRT_SECURE_NO_WARNINGS#include <string>using namespace std;class student{public:char m_name[25];int m_age;int m_score;char* get_name(){return m_name;}int set_name

react笔记 8-19 事件对象、获取dom元素、双向绑定

1、事件对象event 通过事件的event对象获取它的dom元素 run=(event)=>{event.target.style="background:yellowgreen" //event的父级为他本身event.target.getAttribute("aid") //这样便获取到了它的自定义属性aid}render() {return (<div><h2>{

Python---文件IO流及对象序列化

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 前文模块中提到加密模块,本文将终点介绍加密模块和文件流。 一、文件流和IO流概述         在Python中,IO流是用于输入和输出数据的通道。它可以用于读取输入数据或将数据写入输出目标。IO流可以是标准输入/输出流(stdin和stdout),也可以是文件流,网络流等。

小琳Python课堂:深入理解Python对象:状态、创建与管理

大家好,这里是小琳Python课堂。今天我们继续深入理解Python对象的状态、创建与管理。让我们一起来探索这些概念,以帮助你更好地掌握Python编程。 一、Python对象的状态 1. 实例属性与类属性 Python对象的属性分为实例属性和类属性。实例属性是对象独有的,而类属性则被类的所有实例共享。 实例属性:比如汽车的颜色、品牌和价格,每个汽车对象都有其独特的实例属性。类属性:比如

请解释JSP中的九大内置对象及其作用。什么是Java Web中的请求转发和重定向?它们有什么区别?

请解释JSP中的九大内置对象及其作用。 JSP(JavaServer Pages)中的九大内置对象(也称为隐式对象或自动对象)是JSP容器为每个页面提供的Java对象,这些对象在JSP页面被转换成Servlet时自动可用,无需显式声明。这些对象极大地简化了JSP页面的开发,因为它们提供了对Web应用程序中常见功能的直接访问。以下是九大内置对象及其作用的详细解释: request:javax.

理解C++全局对象析构顺序与 IPC 资源管理:避免 coredump

文章目录 0. 概述1. 问题背景2. 问题分析3. 解决方案:手动释放资源4. 深入剖析:为什么手动调用 `reset()` 有效?5. 延伸思考:如何避免全局对象带来的问题?6. 总结 0. 概述 在编写 C++ 程序时,使用全局或静态对象有时可能会导致不可预期的崩溃(如 coredump)。这类崩溃通常源于对象的析构顺序、资源的管理方式,以及底层资源(如 IPC 通道或共