第3章 面向对象设计思想之一 抽象
第3章 面向对象程序设计基础

3.4.4
私有继承
当类的继承方式为私有继承时,基类的public和protected成 员都成为派生类的private成员,派生类的其他成员可以 直接访问它们,但是派生类外部无法通过派生类的对象 访问继承来的对象。基类的private成员在派生类内部和 外部都是不可访问的。
3.4.5
保护继承
保护继承:当类的继承方式为保护继承时,基类的public和 protected成员都成为派生类的protected成员,派生类的 其他成员可以直接访问它们,但是派生类外部无法通过 派生类的对象访问继承来的对象。基类的private成员在 派生类内部和外部都是不可访问的。
3.4
继承
继承是面向对象编程的重要特征,继承的机制使得一个新类 可以获得现有类的属性和方法,这就使得在软件的实际 开发过程中代码的复用率得到提高,软件开发人员可以 根据需求对现有类进行修改,最大限度地重复现有的软 件。
3.4.1
继承的概念
在日常的生活中,关于继承的概念并不陌生,例如子女继承 了父母的部分特征、新产品拥有以前产品的优点,也就 是某个具体的人或事物从另一个人或事物中派生出的一 些属性。同理,在C++语言中,一个类可以从一个类中继 承它的属性和方法。从一个现有类派生出另一个新类的 机制叫做继承。
3.2.5
成员函数
成员函数是函数的一种,它抽象了一类对象的行为。它的用 法和作用与一般函数基本一样,唯一的差别就是它是一 个类的成员,可以把访问限制定义为私有、公有或受保 护的。一般地将成员函数的访问限制定义为共有,因为 它们是一个类对外部程序提供的公共接口;也可将成员 函数定义为私有,表示是类内部函数,只能被本类中其 他函数成员调用,而不能被类外调用 .
第三章 面向对象程序设计

3.1.3 方法的重载(overloading)
动态绑定:
1、编译器检查对象的声明和方法名。
例:调用wash方法,所有名字为wash的方法都 会被找出来。
wash (Cloth shirt) wash (Auto car)
wash (Animal dog,int n)
2、编译器根据调用时的实参值,选择所调用的 方法,例:wash(benz)
为变量定义(域)
}
方法定义
3.1 类和方法
成员变量:
在定义类时,所定义的那些变量
上例:float hight,weight;
String name,sex,id;
其中的 hight,weight,name,sex,id 就是成员变量
3.1 类和方法
局部变量: 方法体中定义的变量和方法的参数 上例方法定义 float f(float x,float y) { float z; …… } 中的 x ,y,z 为局部变量
第三章面向对象程序设计
Object-Oriented-Programming
学习导读
1 2 3 4 5 6 7
理解类和对象的定义
方法的重载,重写和动态绑定 封装,继承和多态
修饰符
Java的接口机制
Java的类管理机制 常用工具类
面向对象的基础
1.数据封装 类:面向对象 程序设计的基础 2.继承 3.抽象化 4.多态性
3.1.3 方法的重载(overloading)
一个类中可以有多个方法具有
1.相同的名字,
2.相同的类型, 3.不同的参数,
这种情况叫重载
3.1.3 方法的重载(overloading)
例:class Wash
课堂第三章 面向对象程序设计

10
类的定义
私有成员 可以调用 不可调用 私有函数 可以调用 不可调用 公有成员 可以调用 可以调用 公有函数 可以调用 可以调用 保护成员 可以调用 不可调用 保护函数 可以调用 不可调用
11
类内函数 类外函数
类内函数 类外函数
第一章 VC集成开发环境 集成开发环境
第一章 VC集成开发环境 集成开发环境
12
注意
如果未加说明, 如果未加说明,类中成员默认的访问权限是 private,即私有的。 ,即私有的。
第一章 VC集成开发环境 集成开发环境
13
class Student { char Name[20]; float Math; 均为私有权限 float Chiese; public : float average; void SetName(char *name); 均为公有权限 void SetMath(float math); void SetChinese(float ch); float GetAverage(void); };
第一章 VC集成开发环境 集成开发环境
4
类
人
狮子
老鹰
动物
第一章 VC集成开发环境 集成开发环境
5
类的封装
类是把多种特征的数据和函数封装成一个整体。 封装是面向对象编程思想中的重要特性之一, 其作用在于定义对象和操作,只提供抽象的接 口,并隐藏其具体实现。封装的结果是类,也 即把有相似属性(成员变量)、操作(成员函 数)的事物绑在一起处理(即一个类)。 例如,为了方便管理公司职工,可以给职工写 一个类,该类的属性可以有年龄、性别、姓名、 入职日期等,操作可以有开除、调动等,这就 实现了封装,
第3章 面向对象程序设计

Code:Ch03/classbase/Student.java
3.2 对象基础
3.2.3 Stack and Heap—Quick Review For most people, understanding the basics of the stack and the heap makes it far easier to understand topics like argument passing, polymorphism, threads, exceptions, and garbage collection. For the most part, the various pieces (methods, variables, and objects) of Java programs live in one of two places in memory: the stack or the heap. For now, we're going to worry about only three types of things: instance variables, local variables, and objects: ■ Instance variables and objects live on the heap. ■ Local variables live on the stack.
成员变量的类型可以是Java中任意的数据类型,包 括简单类型,类,接口,数组。在一个类中的成员 变量应该是唯一的。
3.2 对象基础
3.2.1 类与对象 类的定义---方法定义
[方法修饰字 返回类型 方法名称 参数 参数 方法修饰字] 方法名称(参数 参数2,…) [throws exceptionList] 参数1,参数 方法修饰字 { …(statements;) //方法体:方法的内容 方法体: 方法体 } [public | protected | private ] [static] [final | abstract] [native] [synchronized]
第3章面向对象设计基础解析

第3章 面向对象设计基础 第二章介绍了C#的基本语法,以及使用方法。C#同Java、C++一样是面向对象的编程语言,同时C#更强化了面向对象的概念。本章将介绍面向对象的基础知识并介绍使用C#编写面向对象的应用程序,在C#中,面向对象的开发能够给系统设计、编码、维护提供更多的便利。
3.1 什么是面向对象 面向对象是应用程序开发中一个非常重要的技巧和概念,面向对象并不是什么高深的技术也不是负责的学习体系,面向对象主要是一种设计的思路。使用面向对象进行应用程序开发能够非常好的将现实中的物体进行抽象,这样就在一定程度上丰富了应用程序的结构,不仅如此,面向对象还包括继承、多态等特性以便能够快速构架应用程序。
3.1.1 传统的面向过程 在传统应用程序开发领域(如C语言的开发),或者是早期的基于B/S领域的Web应用程序开发(如ASP)都使用的是传统的面向过程的开发语言。而C++/JAVA/C#等开发都是使用的面向对象的开发语言。面向对象的开发语言更接近人类理解自然的语言,对开发人员来说更加通俗易懂,同时也对“对象”进行了较好的抽象。面向过程的一段C语言代码如下所示。 main() { sum(x,y); get(x,y); print(x); print(y); } 上述代码截取了C语言中的一个代码段,从上述代码中可以看出,C语言中基本没有对象的概念。
当执行一个主方法Main时,按照程序逻辑调用不同的函数,来达到运算的目的。传统的面向过程的开发必须规定每一个步骤,或者明确每一种函数,并在程序运行中调用不同的函数来实现运算的目的。面向过程的思想决定了其没有派生、覆盖、继承等特性,所以每当创建一个新的“对象”时,就有可能需要编写更多的代码,这在一定程度上造成了代码的编写和维护的困难。
3.1.2 面向对象的概念 在面向过程的开发当中,开发人员发现在调用函数的时候,很难分清楚函数本身是属于哪个文件的,在代码的阅读上面,不同的开发人员会发现很难读懂其他的开发人员的代码。虽然注释和良好的命名都 55
第三章Java面向对象程序设计

计算机科学与技术系
第3章 Java面向对象程序设计
3.1 3.2 3.3 3.4 3.5 3.6 3.6
面向对象基本概念
类与对象
继承与多态 包 抽象类、接口 内部类与匿名类 泛型类
第3章 Java面向对象程序设计
本章学习目标
• • • • • • • • • • • 理解面向对象基本概念 掌握类的定义、组成与使用 掌握访问控制符的作用; 掌握构造方法 理解继承机制 掌握成员覆盖,重点是方法重写 理解多态概念,掌握两种方法多态 掌握包、抽象类、接口定义与使用; , 理解接口与抽象类的异同 内部类与匿名类; 泛型类。
第3章 Java面向对象程序设计
(2)面向对象的基本特征 1)封装性:封装性是描述实体的数据(属性)和基于这些数 据操作(行为)集合到一起,形成一个封装体,并尽可 能隐蔽对象的内部细节。
2)继承性 一个类可以是多个一般类(父类)的特殊类(子类),它从 多个一般类中继承了属性与服务,这称为多继承。 Java中所有的类都是多态性是指在一般类中定义的属性或服务被特殊类继承之后, 可以具有不同的数据类型或表现出不同的行为。
1)可重用性:是面向对象软件开发的核心思路。抽象、封装、 继承与派生、多态性围绕可重用性核心。应用 软件由模块组成。 2)可扩充性:面向对象软件开发:快速原形 传统软件开发:瀑布式 3)可管理性:以过程或函数为单位(面向过程), 类为单位 (面向对象)
第3章 Java面向对象程序设计
3.2 类与对象
public float getgpa() { return gpa; } //修改平均成绩点数 public void setgpa() { gpa=23.5f; } }
第3章 Java面向对象程序设计
第3章_抽象和封装.
面向对象的编程思维
ScoreCalc类 和 Test类
public static void main(String[ ] args) { Scanner input = new Scanner(System.in); Test ScoreCalc System.out.print("请输入Java成绩:"); int java = input.nextInt(); 一次还可以接受,如果 main(){ //程序入口 calcTotalScore() …… 类的方法实现某个特定的功能, //计算并输出总成绩 还要再执行这个功能, /*计算并显示输出 */ 其他类不需要知道它如何实现! 调用 难道还要重复再写? int total = java + c + db; 知道了实现此功能的类和它的方法名, calcDiffTime showTotalScore() double avg = total / 3; 就可以直接调用了,不用重复写代码! //计算并输出平均分 System.out.print("总成绩:" + total); 调用 System.out.print("\n 平均分: " + avg); calcAvg() }
构造方法 3-3
阅读代码,说出运行结果,并指出原因
class Penguin { String name; String sex; int health; 有返回值类型, public void Penguin() { 不是构造方法 health=10; sex="雄"; System.out.println("执行构造方法"); } public void print() { System.out.println("企鹅的名字是" + name + ",健康值是" + health + ",性别是" + sex); } Penguin pgn3=new Penguin(); } pgn3.print();
第03章 面向对象编程基础
3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8
面向对象的思想 面向对象程序设计的基本特点 建立类与对象 构造函数和析构函数 类的作用域和对象的生存期 类的静态成员 常类型 数组、指针与对象 类的组合
2019/2/12
C++面向对象程序设计
在C++中如果以电视为例进行抽象并封装的 话,可以得到如下代码:
class Television //class关键字 类名 { //边界 public: //外部接口 void SetChannel(int ChannelNum); //行为,代码成员 void ShutDown(); //行为,代码成员 private: //特定的访问权限 int CurrentChannel; //属性,数据成员 };
在现实中,为了减少必须处理的事情,我们 是在某一程度的细节中生活的。在面向对象 程序设计中,这种细节程度就叫抽象。 数据抽象与代码抽象
C++面向对象程序设计
2019/2/12
3.1.2 封装
在面向对象程序设计中抽象可以表示它 所描述事物的所有属性和操作,将抽象 得到的数据和操作相结合,形成一个有 机的整体,就叫做封装。
C++面向对象程序设计 2019/2/12
3.2.1 类的声明与实现
这里还是以电视为例,声明一个类来描 述电视。
class Television { public: void SetChannel(int ChannelNum); void ShutDown(); void TurnOn(); private: int CurrentChannel; bool IsOpen; };
第3章面向对象程序设计
2.方法参数
(1)值参数 未用任何修饰符声明的参数为值参数。
(2)引用参数 用ref修饰符声明的参数为引用参数。在方法中对引 用参数的任何更改都会反映给实参。
(3)输出参数 用out修饰符声明的参数称为输出参数。如果希望 函数返回多个值,可使用输出参数。
【例3-4】使用值参数
【例3-5】使用引用参数
C#继承有如下重要性质:
❖ C#只允许单继承,即派生类只能有一个基类; ❖ C#的继承是可传递的,如果 C 从 B 派生,而 B 从
A 派生,那么 C 就会既继承在 B 中声明的成员, 又继承在 A 中声明的成员; ❖ 派生类扩展它的直接基类,即派生类可以添加新的 成员,但不能删除从基类继承的成员; ❖ 构造函数和析构函数不能被继承; ❖ 派生类可以隐藏基类的成员,如果在派生类中声明 了与基类同名的新成员时,基类的该成员在派生类 中பைடு நூலகம்不能被访问到。
class TestTime{
static void Main(string[] args) {
ProcessTime p = new ProcessTime();
MyTime t = new MyTime(); //把事件与事件处理联系起来
t.Timer += new TimeEventHandler(p.GenerateTime);
【例3-10】重载Point类的++和+
6.this关键字
❖ this 关键字引用类的当前实例,成员通过 this关键字可以知道自己属于哪一个实例。 this关键字是一个隐含引用,它隐含于每个 类的成员函数中。
❖ this 的常用用途:
限定被相似的名称隐藏的成员 将对象作为参数传递到其他方法 声明索引器
第3章-面向对象程序设计基础-答案
第3章面向对象程序设计基础【1】什么是Java程序使用的类?什么是类库?[解答]:Java程序的基本单位是类。
对象是对事物的抽象,而类是对对象的抽象和归纳,找出事物的共性,把具有共同性质的事物归结为一类。
累是具有相同属性和方法的一组对象的集合,类是在对象之上的抽象,对象是类的实例化,类定义一种对象能够拥有的数据和能完成的操作。
一旦建立类后,就可用它来建立许多你需要的对象。
Java的类库是系统提供的已实现的标准类的集合,是Java编程的API,它可以帮助开发者方便、快捷的开发Java程序。
【2】如何定义方法?在面向对象程序设计中方法有什么作用?[解答]:方法的定义由两部分组成:方法声明和方法体。
方法声明的基本格式如下:返回类型方法名(形式参数){…//方法体内容}方法声明包括方法名、返回类型和形式参数,方法的小括号是方法的标志;方法体为实现方法行为的Java语句。
在面向对象程序设计中,方法所起的作用是完成类和对象的属性操作。
【3】简述构造方法的功能和特点。
下面的程序片段是某学生为student类编写的构造方法,请指出其中的错误。
void Student(int no,String name){studentNo=no;studentName=name;return no;}[解答]:构造方法是一个特殊的方法,主要用于初始化新创建的对象。
构造方法的方法名要求与类名相同,用户不能直接调用,只能通过new运算符调用,构造方法不返回任何数据类型,也不返回void数据类型,即不能在构造方法前加void。
上面的代码出错处:(1)构造方法student前不能加void.(2)不能用return语句。
【4】定义一个表示学生的student类,包括的域有学号、姓名、性别、年龄,包括的方法有获得学号、姓名、性别、年龄及修改年龄。
编写Java程序创建student类的对象及测试其方法的功能。
[解答]:class student{private String id;private String name;private String sex;private int age;public String getId(){return id; }public String getName(){ return name; }public String getSex(){ return sex; }public int getAge(){ return age; }void setAge(int age){ this.age = age; }}public class TestStudent{ public static void main(String args[]){ student stu = new student("201101010220", "许国鹏", "男",22);System.out.println("student info: " + "\n学号:" +stu.getId()+ "\n姓名"+ stu.getName()+"\n性别:"+stu.getSex()+ "\n年龄:"+stu.getAge());stu.setAge(23);System.out.println("修改后的年龄为:"+stu.getAge());}}【5】扩充、修改程序。