
第4章抽象、封装与类 一、要点解析 1.散学内容 Jn语言系统定义的类:用户自定义的类:类的修饰符:类的静态属性一域:类的动态属性一方法: 对象。 ·自定义类 系统定义的类,虽然实现了许多常见的功能,但是在语言程序设计中,用户仍要恨据编程的需 要自己定义一些类。类作为复合数据类型,它封装了若干对象共同的域和方法。自定义一个类,就是创建 一个新的数据类型,实例化一个类城是得到一个这个类的具体对象。 ·类定义的格式 用户程序白定义一个类的操作包括:定义类头和类体两个部分: 定义类头主要说明所定文类的类名及这个类是否有父类或接口: 定义类体主要是根据程序设计的需要定义若干个线成员变量)和方法,定义一个类更主要的就是定义 它的类体, 类定义的格式: 【P倒blic][abstract|final]class类名【extend水父类名][implements接口名表子+类头 若干域 若干方法…类体 } J语言程序设计中,定义类时除了要使用c8关健字说明所定义的数据类型是类,还可以在c 之前增加若干类的修饰符来限定所定义类的操作特性,说明类的属性, 类的修饰符分为:可访问控制符和非访月控制符两种。 可访问控制符是:公共类修饰符pic 非访间控制符有:抽象类修饰符止rct、最终类修饰符f园 J语言的方法是类的动态属性,它给出了你所定义的类应具有的操作功能,na语言的方法类似于 C+语言中的函数、过程。也是用来实现提定操作功能的一段程序。在J程序中定义方法的目的是:定 义具有相对熟立操作和指定功能的程序柄块。使程序结构清断,易于程序树块的调用。 ·方法的定义格式 方法由方法头和方法体组成,其定文的一般格式为: [publie|private|procected staic][finallabstract][mative](可nchronied可返回值类型方法名 (形式参数列表]川hos异常列表」…方法头 方法体各语句行:…方法体
第 4 章 抽象、封装与类 一、要点解析 1.教学内容 Java 语言系统定义的类;用户自定义的类;类的修饰符;类的静态属性—域;类的动态属性—方法; 对象。 ⚫ 自定义类 系统定义的类,虽然实现了许多常见的功能,但是在 Java 语言程序设计中,用户仍要根据编程的需 要自己定义一些类。类作为复合数据类型,它封装了若干对象共同的域和方法。自定义一个类,就是创建 一个新的数据类型,实例化一个类就是得到一个这个类的具体对象。 ⚫ 类定义的格式 用户程序自定义一个类的操作包括:定义类头和类体两个部分; 定义类头主要说明所定义类的类名及这个类是否有父类或接口; 定义类体主要是根据程序设计的需要定义若干个域(成员变量)和方法,定义一个类更主要的就是定义 它的类体。 类定义的格式: [public][abstract ︱final] class 类名 [extends 父类名][implements 接口名表]…类头 { 若干域 若干方法 …… 类体 } Java 语言程序设计中,定义类时除了要使用 class 关键字说明所定义的数据类型是类,还可以在 class 之前增加若干类的修饰符来限定所定义类的操作特性,说明类的属性。 类的修饰符分为:可访问控制符和非访问控制符两种。 可访问控制符是: 公共类修饰符 public 非访问控制符有:抽象类修饰符 abstract、最终类修饰符 final Java 语言的方法是类的动态属性,它给出了你所定义的类应具有的操作功能,Java 语言的方法类似于 C++语言中的函数、过程,也是用来实现规定操作功能的一段程序。在 Java 程序中定义方法的目的是:定 义具有相对独立操作和指定功能的程序模块,使程序结构清晰,易于程序模块的调用。 ⚫ 方法的定义格式 方法由方法头和方法体组成,其定义的一般格式为: [public∣private∣protected ][static][final|abstract][native][synchronized] 返回值类型 方法名 ([ 形式参数列表])[ throws 异常列表] ……方法头 { 方法体各语句行;……方法体

·方法的控制修饰符 方法的控制修饰符也分为:可访问控制符和非访日控制符两类。 ()可访问控制符有:4种 公共访问控制符:pe 私有访问控制符:pv除 保护访问控制符:protected 私有保护访问控制符private protected 可访问控制行的作用类以于域的修饰符 (约非访间控制符有:5种 袖象方法控制符:r 静态方法控制符:ac 最悴方法控制符:fnd 本地方法控制符:ae 同步方法控制符:身chronized 重点说明非访风控制符的作用 ·抽象方法控制符:ab以a 用修物符修饰的方法称为抽象方法。它是一种仅有方法头,没有方法体和操作实现的一种特 殊方法。 ●静态方法控制符:c,用修饰符sc修饰的方法称为静态方法。 静态方法是属于整个类的类方法:而不使用s过修饰、限定的方法是属于某个具体类对象的方法。 定义一个方法为静态方法后,该方法应具有以下特点: ()调用这个方法时,应该使用类名作,翅。而不使用一个具体的对象名。 (②非加的方法是属于某个对象的方法,在这个对象建立时,它的方法将在内存中拥有自己的专用代马 段:而静态方法属于整个类,静老方法在内存中的代码段将随着类的定义而分配内存空间和调入相关数据, 不为任何一个对象所专用,这个特性类似静态域。 (凶由于静态方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,只能处理属于整个 类的成员变量,即只能处理静态域. ●最终方法控制符:final 用修饰符✉l修饰的方法称为最终方法。最终方法是功能和内部语句不能更改的方法,这种方法固定 了方法所具有的功能和操作,从而可以防止当前类的子类对父类关键方法的错误定义,候正了程序的安全 性和正确性。所有被pae修饰符限定为私有的方法,以及所有包含在l类(最修类)中的方法,都棱 认为是最终方法。 ·对象的定义 对象的定义包括三个方面的操作:定文,实例化和初始化。 )定义对象:定义对象的一数格式是
} ⚫ 方法的控制修饰符 方法的控制修饰符也分为:可访问控制符和非访问控制符两类。 ⑴ 可访问控制符有: 4 种 公共访问控制符: public 私有访问控制符: private 保护访问控制符: protected 私有保护访问控制符: private protected 可访问控制符的作用类似于域的修饰符 ⑵非访问控制符有:5 种 抽象方法控制符:abstract 静态方法控制符: static 最终方法控制符: final 本地方法控制符: native 同步方法控制符: synchronized 重点说明非访问控制符的作用 ⚫ 抽象方法控制符:abstract 用修饰符 abstract 修饰的方法称为抽象方法。它是一种仅有方法头,没有方法体和操作实现的一种特 殊方法。 ⚫ 静态方法控制符:static,用修饰符 static 修饰的方法称为静态方法。 静态方法是属于整个类的类方法; 而不使用 static 修饰、限定的方法是属于某个具体类对象的方法。 定义一个方法为静态方法后,该方法应具有以下特点: ⑴ 调用这个方法时,应该使用类名作前缀,而不使用一个具体的对象名。 ⑵ 非 static 的方法是属于某个对象的方法,在这个对象建立时,它的方法将在内存中拥有自己的专用代码 段;而静态方法属于整个类,静态方法在内存中的代码段将随着类的定义而分配内存空间和调入相关数据, 不为任何一个对象所专用,这个特性类似静态域。 ⑶ 由于静态方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,只能处理属于整个 类的成员变量,即只能处理静态域。 ⚫ 最终方法控制符:final 用修饰符 final 修饰的方法称为最终方法。最终方法是功能和内部语句不能更改的方法,这种方法固定 了方法所具有的功能和操作,从而可以防止当前类的子类对父类关键方法的错误定义,保证了程序的安全 性和正确性。所有被 private 修饰符限定为私有的方法,以及所有包含在 final 类(最终类)中的方法,都被 认为是最终方法。 ⚫ 对象的定义 对象的定义包括三个方面的操作:定义、实例化和初始化。 ⑴ 定义对象:定义对象的一般格式是

类名对象名=W构造函数()力 ②实例化对象:运算符w的作用是为新建对象开辟内存空间,以存销这个对象所拥有的域和方法, 即实例化一个对象。 初始化操作:系统自动调用对象的构迹函数,为其进行初始化操作。 ·对象的使用 对象的使用包括访问对象的成员变量(域和调用对象的方法。其格式为: 对象名.域名 对象名.方法名(形式参数列表) ·对象的清除 J程序运行时系统通过拉最站收集周期性地释故无用对象所占用的内存空间,完成对象的清除操 作。从而程序黄不必限踪每个生成的对象,这是a程序的一大优点, ●构造函数 构造函数是与类同名的方法。定义对象的语句用w运算符开牌了新建对象的内存空间之后,系统 将白动调用构造函数来初始化这个新建的对象。所以构造函数是类的一种特殊的方法。 构造函数主要有以下特征: ()构造函数的方法名与类名相同。 由构造函数的作用主要是为类的对象进行初始化操作。 构造函数没有起问类型, ()在创建一个类的对象时,系统会自动调用该类的构迹函数为这个对象进行初始化操作。 构迹函数一般不能由编程人员显式地直接调用. 构造函数的调用:构造函数定义了几个形式参数。定义对象的语句在调用构造函数时应提供几个 类型、顺序一致的实际参数,指明新建对象的初值。利用这种机制就可以创建不同初始特性的同类对象。 如果用户自定义类时表定义它的构造函数。初始化对象时系饶将调用系统默认的无参数构造函数 为这个对象进行初始化燥作。 2。数学要求 了解:系统定文的类(包): 基握:类的可访月控制符和非访问控制符的种类及其控制功能:域的可访问控制符和丰访问控制符的 种类及其控制功能:方法的可访同控制符和非访门控制符的种类及其控制功能。 熟练掌提:用户程序白定义类和对象的基本格式:并以电话卡类为奥型例愿学会并掌握分析n语言 程序的方法,培养粒立编程的能力: 二、典型例题 Cirele.java publie elass Circle ∥定义一个周形类 static double Pl-3.14159265; ∥类变量P四 int radius. ∥实例变量圆半轻
类名 对象名 = new 构造函数( ); ⑵ 实例化对象:运算符 new 的作用是为新建对象开辟内存空间,以存储这个对象所拥有的域和方法, 即实例化一个对象。 ⑶ 初始化操作:系统自动调用对象的构造函数,为其进行初始化操作。 ⚫ 对象的使用 对象的使用包括访问对象的成员变量(域)和调用对象的方法。其格式为: 对象名.域名 对象名.方法名(形式参数列表) ⚫ 对象的清除 Java 程序运行时系统通过垃圾站收集周期性地释放无用对象所占用的内存空间,完成对象的清除操 作。从而程序员不必跟踪每个生成的对象。这是 Java 程序的一大优点。 ⚫ 构造函数 构造函数是与类同名的方法。定义对象的语句用 new 运算符开辟了新建对象的内存空间之后,系统 将自动调用构造函数来初始化这个新建的对象。所以构造函数是类的一种特殊的方法。 构造函数主要有以下特征: ⑴ 构造函数的方法名与类名相同。 ⑵ 构造函数的作用主要是为类的对象进行初始化操作。 ⑶ 构造函数没有返回类型。 ⑷ 在创建一个类的对象时,系统会自动调用该类的构造函数为这个对象进行初始化操作。 ⑸ 构造函数一般不能由编程人员显式地直接调用。 ⑹ 构造函数的调用:构造函数定义了几个形式参数,定义对象的语句在调用构造函数时应提供几个 类型、顺序一致的实际参数,指明新建对象的初值。利用这种机制就可以创建不同初始特性的同类对象。 ⑺ 如果用户自定义类时未定义它的构造函数,初始化对象时系统将调用系统默认的无参数构造函数 为这个对象进行初始化操作。 2.教学要求 了解:系统定义的类(包)。 掌握:类的可访问控制符和非访问控制符的种类及其控制功能;域的可访问控制符和非访问控制符的 种类及其控制功能;方法的可访问控制符和非访问控制符的种类及其控制功能。 熟练掌握:用户程序自定义类和对象的基本格式;并以电话卡类为典型例题学会并掌握分析 Java 语言 程序的方法,培养独立编程的能力。 二、典型例题 // Circle.java public class Circle{ // 定义一个圆形类 static double PI = 3.14159265; // 类变量 PI int radius; // 实例变量圆半径

public double circumference() ∥计算圆的间长的方法 ctum2◆Pl*adu public double area()! ∥计算圆的面积的方法 return Pl◆radius◆radius public void enlarg对int factor){∥放缩圆的半径 adis=radius·factor. public boolean fitslnside(Rectangle r)!W当前圆对象是否在矩形对象的内部 return (2 radius<r.width)(2 radius <r.height); ∥Rectangle.java ublie class Rectangle!∥定义一个矩形类 double width=10.128:∥定复-个实例变量矩形宽度,初值为10.128 double height-5734,∥定义一个实例变量矩形高度,初始值为5734 public double area){∥计算矩形面积的方法 return width*height. ∥Inside Tester java public class InesideTester ∥定义一个InsideTester类作为Jana程序的启动类 public static void main(String args])! Circle cl new Circle(). H创建一个圆类对象el el.raduus=8. ∥cl的半径是8 Circle c2-new Circle) W创建一个圆类对象c2 ce2.mdis■15: ∥c2的半径是15 Rectangle r-new Rectangle();N创建一个矩形类对象r 【.widh=20 ∥矩形类对象r的宽度是20 r.height30. ∥矩形类对象í的高度是30 Syem.out.println("Cirele 1 fits inside Rectangle:”+cl.tsInside(r),∥输出cl是否在r内部 System out primtln("Circle2 fits inside Rectangle:·+c2.fitslnside(r)hW输出c2是否在r内都
public double circumference(){ // 计算圆的周长的方法 return 2 * PI * radius; } public double area(){ // 计算圆的面积的方法 return PI * radius * radius; } public void enlarge(int factor) { // 放缩圆的半径 radius = radius * factor; } public boolean fitsInside (Rectangle r) { // 当前圆对象是否在矩形对象的内部 return (2 * radius < r.width) && (2 * radius < r.height); } } // Rectangle.java public class Rectangle{ // 定义一个矩形类 double width = 10.128; // 定义一个实例变量矩形宽度,初始值为 10.128 double height = 5.734; // 定义一个实例变量矩形高度,初始值为 5.734 public double area() { // 计算矩形面积的方法 return width * height; } } // InsideTester.java public class InsideTester { // 定义一个 InsideTester 类作为 Java 程序的启动类 public static void main(String args[]) { Circle c1 = new Circle(); // 创建一个圆类对象 c1 c1.radius = 8; // c1 的半径是 8 Circle c2 = new Circle(); // 创建一个圆类对象 c2 c2.radius = 15; // c2 的半径是 15 Rectangle r = new Rectangle(); // 创建一个矩形类对象 r r.width = 20; // 矩形类对象 r 的宽度是 20 r.height = 30; // 矩形类对象 r 的高度是 30 System.out.println("Circle 1 fits inside Rectangle: " + c1.fitsInside(r)); // 输出 c1 是否在 r 内部 System.out.println("Circle 2 fits inside Rectangle: " + c2.fitsInside(r)); // 输出 c2 是否在 r 内部 } }