Download presentation
Presentation is loading. Please wait.
1
第13讲 面向对象(1) 3.1 面向对象的概念 3.2 类与对象
2
知识回顾 学过的关键字有哪些? 程序结构:顺序、分支、循环 变量定义与使用 方法定义与使用 数组定义与使用
public static void class int short byte long char float double boolean true false null if else switch case default break for while do continue new 程序结构:顺序、分支、循环 变量定义与使用 方法定义与使用 数组定义与使用
3
作业中的问题
4
作业中的问题
5
作业中的问题
6
作业中的问题
7
本讲要点 【要点】 【教学目标】 面向对象的概念 类的定义与对象的创建
理解面向对象程序设计的基本概念,掌握面向对象程序设计的基本特征,理解什么是类,什么是对象,以及如何定义类,如何创建对象。
8
3.1 面向对象的概念 【面向对象】 现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。 面向对象是一种符合人类思维习惯的编程思想。
9
3.1 面向对象的概念 【面向过程】 面向过程就是分析解决问题所需要的步骤,面向对象则是把解决的问题按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。
10
3.1 面向对象的概念—五子棋 【面向过程设计思想】首先分析问题的步骤: 1、开始游戏 2、黑子先走 3、绘制画面 4、判断犯规输赢
5、轮到白子 6、绘制画面 7、判断犯规输赢 8、返回步骤2 9、输出最后结果。 把上面每个步骤用分别的函数来实现,问题就解决了。
11
3.1 面向对象的概念—五子棋 【面向对象设计思想】整个五子棋可以分为三类对象: 对象之间的关系:
第一类:玩家对象(黑白双方),负责接受用户输入 第二类:棋盘对象,负责绘制画面 第三类:规则对象,负责判定诸如犯规、输赢等。 对象之间的关系: 玩家对象接受用户输入,并告知棋盘对象; 棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化; 棋盘对象告知规则对象来对棋局进行判定,结果告知棋盘对象
12
3.1 面向对象的概念 【面向对象的特点】可概括为封装性、继承性和多态性 封装性:面向对象的核心思想,将对象的属性和行为封装起来,不让外界知道具体实现细节。如某部手机的实现细节,内部构造是封装起来的。 继承性:主要描术类与类之间的关系。通过继承,儿子具有老子的某些特征及行为。反映到编程上就是,通过继承可以让子类具有父类的某些特征和行为,而不需要重复编写代码。 多态性:是指对于相同名字的行为,不同的对象可以有不同的呈现方式,如:动物有一种行为“cry”,狗、猫、猪都是动物,但cry的音节不同。
13
3.2 类与对象 面向对象的思想有两个基本概念类、对象。 【类】是对某一类事物的抽象描述。 如:汽车、手机、老师 类通常是回答“什么是XXX?”的问题,如:什么是汽车、什么是手机、什么是老师? 【对象】用于表示现实中该类事物的个体。 如:那辆豫A350汽车、我的这部手机、你的那部手机、孙琪老师、武俊琢老师。 对象通过回答“哪一个XXX”的问题。
14
3.2 类与对象 【类和对象的关系】是某类事物描述与某个具体事物的关系。如:汽车与我的那辆汽车,老师与张倩老师。 类是一个概念,一般不占用空间,对象是一个具体事物,一般会占一定的空间。 在编程中,类就是一种复杂的数据类型定义,对象是这个数据类型的一个具体实例(存放这个类型数据的存储空间)。
15
3.2 类与对象—3.2.1 类的定义 在面向对象的思想中最核心就是对象,为了在程序中创建对象,首先需要定义一个类。
3.2 类与对象— 类的定义 在面向对象的思想中最核心就是对象,为了在程序中创建对象,首先需要定义一个类。 类是对象的抽象,它用于描述一组对象的共同特征和行为 类中可以定义成员变量和成员方法 成员变量对象的特征,也称对象的属性 成员方法对象的行为,简称方法
16
3.2 类与对象—3.2.1 类的定义 【类的定义格式】 [修饰符] class 类名{ [成员变量定义;] //可以没有成员变量
3.2 类与对象— 类的定义 【类的定义格式】 [修饰符] class 类名{ [成员变量定义;] //可以没有成员变量 [构造方法定义] //可以缺省构造方法定义 [成员方法定义] //也可以没有成员方法定义 } 修饰符:public abstract final
17
3.2 类与对象—3.2.1 类的定义 【类定义必不可少的格式】 class 类名{ } 【说明】
3.2 类与对象— 类的定义 【类定义必不可少的格式】 class 类名{ } 【说明】 (1)一个类可以是一个独立的文件,也可以在一个文件中定义多个类,但public类最多有1个,且文件名要与public类的类名相同。 (2)如果在一个文件中定义多个类,这两个类一般不要嵌套定义。 (3)一个类中可以定义主方法,也可以不定义主方法。 (4)同一路径下类名不能重复。
18
3.2 类与对象—3.2.1 类的定义 【成员变量、方法的定义说明】 (1)成员变量定义:[修饰符] 变量类型 变量名;
3.2 类与对象— 类的定义 【成员变量、方法的定义说明】 (1)成员变量定义:[修饰符] 变量类型 变量名; 修饰符:public private protected之一,也可缺省 public:表示这个成员变量是公有的(相当于公开) private:表示这个成员变量只能在自己的类中引用,其它类是不能直接访问的(类的私生活) 缺省时:是一种朋友可用的状态(同一包下的类可直接访问) (2)成员方法定义:(同2.6中所讲的方法定义)
19
3.2 类与对象—3.2.1 类的定义 例1:定义一个Person类(在Example121.java中定义)
3.2 类与对象— 类的定义 例1:定义一个Person类(在Example121.java中定义) Person是类名,age、name是成员变量,speak()是成员方法。在成员方法speak()中可以直接访问成员变量age、name。 说明:在Example131类定义之后定义一个类Person类 class Person{ int age; String name; void speak(){ System.out.println("大家好,我是"+name+",我今年"+age+"岁"); }
20
3.2 类与对象—3.2.2 对象的创建与使用 【对象创建格式】使用new关键字创建对象。 new 类名()
一般我们要定义一个类的变量来引用这个对象。 类名 对象名; 对象名=new 类名(); 或: 类名 对象名=new 类名(); 例如,创建一个Person对象,具体示例如下: Person p=new Person();
21
3.2 类与对象—3.2.2 对象的创建与使用 【说明】 (1)“Person p”则是声明了一个Person类型的变量p,p存放一个存储空间地址。 (2)“new Person()”用于创建Person类的一个实例对象 (3)“=”将Person对象在内存中的地址赋值给变量p,这样p便可以引用这个对象,变量p和对象之间的引用关系如下图所示。
22
3.2 类与对象—3.2.2 对象的创建与使用 【对象引用】成员变量引用、方法引用: 格式如下: 变量引用 对象名.成员变量名
变量引用 对象名.成员变量名 方法引用 对象名.成员方法名(参数值列表) 说明:对象的创建和引用,一般写在主方法(main)中
23
3.2 类与对象—3.2.2 对象的创建与使用 【对象引用】 例如:我们在Example131类的主方法中创建对象并引用
24
3.2 类与对象—3.2.2 对象的创建与使用 通过new创建对象,成员变量会自动赋初值
25
3.2 类与对象—3.2.2 对象的创建与使用 【对象使用说明】 当对象创建后,在程序中可以通过对象的引用变量来访问该对象的成员。
当没有任何变量引用这个对象时,它将成为垃圾对象,不能再被使用。 情况1:变量超出作用域变为垃圾对象
26
3.2 类与对象—3.2.2 对象的创建与使用 情况2:变量的值变为null Java具有垃圾自动回收功能
p2=null时,则p2所引用的第2个对象会变为垃圾对象 程序执行时会出现空指针异常
27
3.2 类与对象—3.2.3 类的设计 例2:假设要在程序中描述一个学校所有学生的信息,可以先设计一个学生类(Student),在这个类中定义学生的相关属性(如:学号、姓名、爱好等),定义一个方法introduce()表示学生做自我介绍。根据上面的描述设计Student类。定义一个应用程序类Example132,在该类的主方法中创建2个Student对象,并引用。
28
3.2 类与对象—3.2.3 类的设计 例2:Example132类的定义
29
3.2 类与对象—3.2.4 类的封装 在上例中,如果将13行代码改为: 运行结果: stu2.age = -19;
你好,我是XXX,今年-19岁,我的爱好是。。。 显然,-19不是一个合理的年龄值。我们将年龄赋值为-19,程序中不会有任何错误,但生活中显然是不合理的。因此,在定义类时,应该对成员变量的访问作出一些限定,不允许外界随意访问,这就需要实现类的封装。
30
3.2 类与对象—3.2.4 类的封装 【类的封装】 是指在定义一个类时,将类中的成员变量私有化,即使用private关键字来修饰。
私有成员只能在它所在类中被访问,为了能让外界访问私有成员变量,需要提供相应的public修饰方法(公有方法),包括用于获取私有成员变量值的getXxx()方法、设置私有成员变量值的setXxx()方法,一般也将这种成员变量称为类的属性。 Xxx表示名字为xxx的属性,set、get方法中因为是方法名的第二个单词,因此首字段是大写的。
31
3.2 类与对象—3.2.4 类的封装 【类的封装】 public void setName(String sName){
private String name; public void setName(String sName){ name=sName; } public String getName(){ return name;
32
3.2 类与对象—3.2.4 类的封装 封装后的Student类
33
3.2 类与对象—3.2.4 类的封装 封装后的Student类
34
3.2 类与对象—3.2.4 类的封装 【封装说明】 使用private关键字将属性name、favorate、age声明为私有成员变量;
getName()方法用于获取name属性的值,setName()方法用于设置name属性的值; getAge()和setAge()方法用于获取和设置age属性的值。在setAge()方法中对参数stuAge的值进行检查; getFavorate()和getFavorate()方法用于获取和设置favorate属性值。
35
3.2 类与对象—3.2.4 类的封装 此时,在Example131中对该类的引用就会出错
原因:Student类中的成员变量成为私有变量,在其它类中不能直接引用
36
3.2 类与对象—3.2.4 类的封装 【封装后的属性访问】 通过setXxx()和getXxx()方法来访问
37
本讲小结 面向对象的基本概念 类与对象 类的定义 对象的创建与使用 类的设计 类的封装
38
作业 3.10习题
Similar presentations