第三章Java面对对象程序设计
3.1 了解面对对象程序设计的基本概念
3.2 掌握类的使用措施
3.3 熟悉对象的创建与使用措施
3.4 了解包的创建与使用措施
3.1 了解面对对象程序设计的基本概念
一、对象
现实世界中,对象(Object)就是客观存在的某一事物。一辆自行车,一台计算机,它们都能够视为对象。对象普遍具备两个特性:状态(属性)和行为。例如,小鸟有名称、体重、颜等状态和飞行、觅食等行为;同样,自行车也有品牌、外观、重量等状态和刹车、加速、减速等行为。
在面对对象程序设计中,对象是一组数据和有关措施的集合。程序中可通过变量向其传递或获取数据,而通过调用其中的措施执行某些操作。在Java中,对象必须基于类来创建。
类是用来描述一组具备共同状态和行为的对象的原型,是对这组对象的概括、归纳与抽象体现。
在面对对象程序设计中,能够让具备共同特性的对象形成类,它定义了同类对象共有的变量和措施。通过类能够生成具备特定状态和行为的实例,这便是对象。
从某种程度上讲,Java编程就是设计类,在编程中能够采取自定义措施或继承措施设计一个类。另外,还可在编程时利用类来创建对象,然后变化对象变量值和调用对象措施来实现程序的某些功效。
二、类
三、封装
封装(Encapsulation )是将代码及其处理的数据绑定在一起的一个编程机制,该机制确保了程序和数据都不受外部干扰且不被误用。了解封装性的一个措施就是把它想成一个黑匣子,它能够制止在外部定义的代码随意访问内部代码和数据。对黑匣子内代码和数据的访问通过一个适当定义的接口严格控制。
封装的目标在于使对象的设计者和使用者分开,使用者无须懂得对象行为实现的细节,只需要使用设计者提供的接口来访问对象。
封装是OOP设计者追求的理想境界,它能够为开发员带来两个好处:模块化和数据隐藏。模块化意味着
对象代码的编写和维护能够独立进行,不会影响到其他模块,并且有很好的重用性;数据隐藏则使对象有能力保护自己,它能够自行维护自身的数据和措施。因此,封装机制提升了程序的安全性和可维护性。
四、继承
继承是面对对象程序设计中两个类之间的一个关系,是一个类能够继承另一个类(即它的父类)的状态和行为。被继承的类称为超类或父类,继承父类的类称为子类。
一个父类能够同时拥有多个子类,这时这个父类实际上是所有子类的公共变量和措施的集合,每一个子类从父类中继承了这些变量和措施。
然而,子类也能够不受父类提供的状态和行为的限制。子类除了具备从父类继承而来的变量和措施外,还能够增加自己的变量和措施。子类也能够变化从父类继承来的措施,即能够覆盖继承的措施。
继承使父类的代码得到重用,在继承父类提供的共同特性的基础上增加新的代码,从而使编程无须一切从头开始,进而有效提升了编程效率。常用的java编译器有哪些
五、多态
多态性能够用“一个对外接口,多个内在实现措施”来表示。也就是说,我们能够在一个类中定义多个同名措施,程序在调用某个措施时,系统会自动依照参数类型和个数的不一样调用不一样的措施,这种机制被称为措施重载。
另外,当我们利用继承由父类创建子类时,假如父类中的某些措施不适合子类,我们无法删除它们,但能够重新定义它们,这被称为覆盖。如此一来,当我们利用子类创建对象时,假如调用对象的某个措施,系统会首先在子类中查此措施。假如到,则调用子类的措施;否则,将向上查,即在父类中查此措施。这种情况被称为父类与子类之间措施的多态性。
3.2 掌握类的使用措施
下面我们结合Java程序的格式来详细简介类的申明措施:
package 包名// 申明程序所在包
import 包名.* // 导入外部包,可包括多条import语句,以导入多个外部包中的类import 包名.类名
// 申明和定义类
[类修饰符] class 类名[extends 父类名称][implements 接口名称列表]{
// 申明组员变量或常量
[访问控制修饰符][static][final]<;数据类型> 变量名或常量名;
……// 定义其他组员变量或常量
// 申明和定义组员措施
[访问控制修饰符][abstract][static][final][native][synchronized]
返回类型措施名(参数列表) [throws 异常类型列表]
{
……// 措施体
}
……// 定义其他措施
}
…// 定义其他类
解释阐明:
(1)在一个Java文档中能够包括多个类,但最多只能有一个为公
共类(即public class,也能够没有)。
(2)假如存在public class的话,该类的类名必须与文档名相同。
(3)main措施是Java应用程序的入口,假如文档中存在public
class和main措施,则main措施必须位于public class中。
main措施的格式如下:
public class 类名{
// 组员变量列表
public static void main(String[] args) {
/
/ 局部变量申明
// 措施体
}
}
一、类申明
类申明定义了类的名字及其他属性。类申明的一般格式如下:
[类修饰符] class 类名[extends 父类名称][implements 接口名称列表]{
……
}
其中,class核心字和类名是必需的,[]表示可选项。类名是要申明的类的名字,它必须是一个合法的Java标识符,习惯上首字母要大写。
1.类修饰符
类修饰符有public、abstract和final。假如没有申明这些类修饰符,Java编译器默认该类为friendly类,对于这些类,只有同一包中的类能够访问。
public(公共的):带有public修饰符的类称为公共类,公共类能够被
任何包中的类访问。不过,要在一个类中使用其他包中的类,必须在
程序中增加import语句。
abstract(抽象的):带有abstract修饰符的类称为抽象类,相称于类
的抽象。一个抽象类能够包括抽象措施,而抽象措施是没有措施体的
措施,因此抽象类不具备详细功效,只用于衍生出子类。因此,抽象
类不能被实例化。
final(最后的):带有final修饰符的类称为最后类。不能通过扩展最
终类来创建新类。也就是说,它不能被继承,或者说它不能派生子类。
2.阐明一个类的父类
extends核心字用来告诉编译器创建的类是从父类继承来的子类,父类必须是Java系统的预定义类或用户已经定义好的类。一个类只能有一个父类,但一个父类能够有多个子类。3.阐明一个类所实现的接口
implements核心字用来告诉编译器类实现的接口,一个类能够实现多个接口,多个接口之间用逗号分隔,其形式为:
implements interface1,interface2,…;
使用接口的重要目标是为了使程序的功效描述和功效的详细实现相分离,从而使程序结构更清楚。
4.类体
类体是类功效实现的主体,是Java语句的集合。类体中一般定义三类要素:组员变量和常量、结构措施和措施。其中,组员变量和常量用来刻画对象的状态,措施用来描述对象的行为,而结构措施一般用来初始化组员变量。
1.访问控制修饰符
使用访问控制修饰符能够限制访问组员变量或常量的权限。访问控制修饰符有4个等级:private、protected、public以及默认(即不指定修饰符)。
二、组员变量与常量
组员变量或常量申明必须放在类体中,其一般形式为:
[访问控制修饰符][static]<;数据类型> 变量名;
2.static变量(类变量或静态变量)
Java中包括两种类型的组员变量:实例组员变量和类组员变量,简称实例变量和类变量。假如用static核心字修饰组员变量,则该变量是一个类变量(又称静态变量)。不加static修饰的组员变量称为实例变量。
package Chapter3
class ConcentCircle{
public static int x=100,y=100; //定义圆心坐标变量
public int r; //定义半径变量
public static void main(String args[]){
ConcentCircle t1=new ConcentCircle(); //创建对象
ConcentCircle t2=new ConcentCircle();
t1.x+=100; //设置圆心的横坐标
t1.r=50; //初始化半径变量
t2.x+=200;
t2.r=150;
System.out.println("Circle1:x="+t1.x+",y="+t1.y+",r="+t1.r);
System.out.println("Circle2:x="+t2.x+",y="+t2.y+",r="+t2.r);
}
}
三、措施的申明与实现
1.措施定义的一般形式
在Java中,措施在类体中定义。与类同样,措施的定义也包括两个部分:措施申明和措施体。
措施申明的一般形式为:
[访问控制修][abstract][static][final][native][synchronized]
返回类型措施名(参数列表) [throws 异常类型]{
……//措施体
}
2.措施的修饰符
措施的修饰符分为访问控制修饰符和非访问控制修饰符。措施的访问控制修饰符与组员变量的访问控制修饰符的使用方法是同样的。
(1)abstract措施(抽象措施)
带有abstract修饰的措施称为抽象措施,是指没有措施体的措施。不过,抽象措施只能出目前抽象类中。
(2)static措施(类措施或静态措施)
措施与组员变量类似,也分为实例措施和类措施(又称静态措施)。带有static修饰符的措施称为类措施,
不加static修饰的措施称为实例措施。
实例措施是属于某个对象的措施,即每个对象的实例措施都有自己专用的内存空间。类措施是属于整个类的,它被该类的所有对象共享。类措施与实例措施请参考【例5】。(3)final措施(最后措施)
带有final修饰的措施称为最后措施。在面对对象程序设计中,子类能够覆盖父类的措施。不过,假如父类的某个措施被final修饰,则其子类就不能覆盖这个措施,只能继承这个措施。因此,这么能够预防子类对父类的核心措施进行修改,确保了程序的安全性。(4)native措施(本地措施)
用其他语言编写的措施在Java程序中称为本地(native)措施。因为native措施的措施体是使用其他语言在程序外部编写的,因此native措施没有措施体。
(5)synchronized措施(同时措施)
同时措施用于多线程编程。多线程在运行时,也许会同时存取一个数据。为了防止数据的不一致性,能够将措施申明为同时措施,进而对数据加锁,以确保线程的安全。(6)throws异常类型列表
程序在运行时也许会发生异常现象。每一个异常都对应着一个异常类。假如希望措施忽视某种异常,可将其抛出,让它的“上级”(如调用它的对象等)来处理,从而使程序得以继续运行。
3.措施的返回类型
一个措施必须申明其返回类型,措施的返回类型能够是Java中的任意数据类型。当一个措施不需要返回数据时,返回类型必须是void(空)。
假如一个措施具备返回值,则在措施体中使用return语句把一个确定的值返回给调用该措施的语句。
4.措施的参数传递
当编写一个措施时,一般会在措施名之后给出一个参数列表(称为措施的形参)来申明该措施所需要的参数类型和参数。参数列表由参数类型和参数名称组成,各参数之间用逗号分隔。在Java中,可传递的参数(称为措施的实参)能够是任何数据类型,包括基本数据类型、数组或对象,它必须与措施的形参完全对应。其中,传递基本类型的参数时,编译器会将参数的值传递到措施中。在措施中修改传递过来的参数的值,并不会影响原参数的值。请参考【例6】与【例7】。
5.重载措施
Java支持重载措施,即多个措施能够共享一个名字。不过,各措施之间必须在参数个数、次序或类型方面有所区分。
public static String doubleIt(String data){ // 参数类型为String
System.out.println(data+data);
return data+data;
}
public static int doubleIt(int data){ // 参数类型为int