第 2章 面向对象的 JAVA语言
? 本章学习目标,
– 了解面向对象程序设计的特点
– 掌握抽象与封装的基本概念
– 掌握 Java语言中类的定义和对象的创建
– 掌握 Java语言中类的继承方法
– 掌握 Java语言中的多态技术
– 了解 Java中的抽象方法与抽象类的基本概念
– 了解接口的基本概念与应用
– 熟悉 Java包的应用
– 掌握 Java异常处理机制
§ 2.1 概 述
? 本节主要内容
– 面向对象程序设计( OOP Object-Oriented
Programming)的优点
– Java语言与面向对象编程
– 抽象与封装
2.1.1 面向对象程序设计( OOP)的发展与形成
? 面向对象程序设计是一种新兴的程序设计方法,
或者说是一种新的程序设计规范, 其基本思想
是使用对象, 类, 继承, 封装, 消息等基本概
念来进行程序设计 。
? 它是从现实世界中客观存在的事物 ( 即对象 )
出发来构造软件系统, 并且在系统构造中尽可
能运用人类的自然思维方式 。
2.1.1 面向对象程序设计( OOP)的发展与形成
? OOP的历史
– 1966年推出的 Simula I,它首次提出模拟人类的思维方法,把数据
和相关的操作集成在一起的思想。
– 1980年推出的 Smalltalk-80 语言已经是一种比较成熟、有效的面向
对象的工具。
– 80年代中后期分别推出了 Lisp, Clascal,Object Pascal, C++ 等
多种面向对象的语言 ;
– Java是 90年代新出现的面向对象的编程语言 。它去除了非面向对象
的内容,使程序更加严谨、可靠、易懂。尤其是 Java所特有的“一
次编写,多次使用”的跨平台优点,使得它特别适合在网络应用开
发中使用,成为面向对象开发工具中极具潜力的一员。
2.1.2面向对象的基本特征
? 1.封装性
– 封装性就是把对象的属性和行为结合成一个独立的
单位,并尽可能隐蔽对象的内部细节,包含两个含
义,
? ① 把对象的全部属性和全部行为结合在一起,形成一
个不可分割的独立单位(即对象)。
? ② 信息隐蔽,即尽可能隐蔽对象的内部细节,对外形
成一个边界 〔 或者说形成一道屏障 〕,只保留有限的
对外接口使之与外部发生联系。
2.1.2面向对象的基本特征
? 2.继承性
– 继承是软件重用的一种形式,在这种形式中,通过吸收现有
类的数据和方法,并增加新功能或修改已有功能来创建新类。
软件的重用性不仅节省了程序的开发时间,还促进经过验证
和调试的高质量软件的重用,这增加了有效实现系统的概率。
– 在 Java中定义的每一个类都必须继承于另一个类,使用关键
字 extends,如果一个类在定义中不使用关键字 extends,这
个类就会隐式继承 Object类。 Object类是所有 Java程序中其
他类的基类。从基类继承来的类叫派生类。 Java中每个类都
是 Object类的派生类。在后续讲解中我们将具体学习面向对
象的继承特性。
2.1.2面向对象的基本特征
? 3.多态性
– 对象的多态性是指在基类中定义的属性或行为被派生类继承之后,
可以具有不同的数据类型或表现出不同的行为。这使得同一个属性
或行为在基类及其各个派生类中具有不同的语义。
– 在 Java语言中,多态性体现在两个方面:由方法重载实现的静态多
态性(编译时多态)和方法重写实现的动态多态性(运行时多态)。
在后续讲解中我们将具体学习面向对象的多态特性。
2.1.3 面向对象程序设计的优点
? 1,可重用性
– 可重用性是面向对象软件开发的一个核心思路,面向对象程序设计
的抽象封装、继承和多态这三大特征无一例外、或多或少地围绕着
可重用性这个核心并为之服务。
– 可重用性就是指一个软件项目中所开发的模块能够不仅局限于这个
项目中使用,而是可以重复地被使用到其他项目中,从而在多个不
同的系统中发挥作用。
– 它提高了开发效率,缩短了开发周期,降低了开发成本。
– 由于采用了已经被证明为正确、有效的模块,程序的质量能够得到
保证,维护工作量也相应减少;
– 采用可重用模块来构建程序,能提高程序的标准化程度,符合现代
大规模软件开发的需求。
2.1.3 面向对象程序设计的优点
? 2.可扩展性
– 可扩展性是对现代应用软件提出的又一个重要要求,即要求应用软
件能够很方便、容易地进行扩充和修改,这种扩充和修改的范围不
但涉及到软件的内容,也涉及到软件的形式和工作机制。
2.1.3 面向对象程序设计的优点
? 3.可管理性
– 在面向过程的开发中是以过程或函数为基本单位来构建整个系统的。
当开发项目的规模变大时,需要的过程和函数数量成倍增多,不利
于管理和控制。而面向对象的开发方法采用内涵此过程和函数丰富、
复杂得多的类作为构建系统的部件,使整个项目的组织更加合理、
方便。
– 例如:一个系统如采用面向过程的开发方法来实现,可能需要 6000
个过程或函数,要管理好这 6000个过程和函数在系统各种可能状态
下的行为及他们之间错综复杂的关系,显然是一件非常麻烦的事情,
也容易出现失误。如果这个系统采用面向对象的开发方法来实现,
则可能仅需要 300个类,每个类中含 20个方法,这样就可以完成同
样的功能。 300相对于 6000,大大降低了管理、控制的工作量,在
开发效率和质量保证等各个方面,都具有很大的优越性。
2.1.4 数据封装
? 数据的封装,提高了数据的安全性。我们一般会把类的属
性声明为私有的,而把类的方法声明为公共的。这样,外
界不能够直接访问类的私有属性,当外界想要修改或得到
对象的私有属性的时候就必须要调用已定义好的专用的方
法才能够实现。
? 例如,对员工信息进行封装,程序如下,
public class Employee
{
private String sName; //员工姓名
//… 等等
//这个方法是修改员工的姓名
public void setName(String a)
{
sName = a;
}
/*
*这个方法是得到员工的姓名
*/
public String getName()
{
return sName;
}
//…… 等等
}
2.1.5静态 static
? 通过 static关键字可以满足,
– 只想为某特定数据分配空间,而不去考虑究竟要创建多少对
象,甚至根本就不创建任何对象。
– 希望某个方法不与包含它的类的任何对象关联在一起。也就
是说,即使没有创建对象,也能够调用这个方法。
? 当声明一个事物是 static时,就意味着这个数据或方法
不会与包含它的那个类的任何对象实例关联在一起。
所以,即使从未创建某个类的任何对象,也可以调用
其 static方法或访问其 static数据。
2.1.5静态 static
? 例如:定义一个包含静态变量的类如,
class TestStatic
{
static int nNumber = 88;
}
? 当你创建了两个 TestStatic对象时,TestStatic.nNumber只
有一份存储空间,这两个对象共享一个 nNumbe。
2.1.5静态 static
? static方法的一个重要用法就是在不创建任何对象的前
提下就可以调用该方法。
? 把一个变量或函数声明为静态的需要,static”这个关键
字。声明静态的目的是“为某个类的所有对象的某个
属性或方法分配单一的存储空间”。
? 静态的数据是属于类的,不属于任何对象。静态的数
据在声明的时候系统就为他分配了内存空间,而不用
等到创建对象时。其他的和普通成员函数没什么不同
的了,不过需要注意的是:在 JAVA中,静态的成员函
数只能修改静态的属性,而静态的属性可以被所有的成员函数修改。
小结
? 通过本节学习,我们主要学习了如下内容,
– 面向对象编程思想的优点
– 面向对象编程思想在 Java中的体现
– 数据的抽象和封装
– static在 Java中的基本应用