文档介绍:本章介绍面向对象程序设计的核心内容,是学习整个
课程的难点所在。学习本章的要求是:
了解类的封装的概念。
掌握类的继承和接口的概念及其具体用法。
掌握类的多态性(方法的重载、方法的覆盖)的含义和实
际意义。
掌握静态成员变量和静态成员方法的意义以及引用或调用
的方法。
了解包的概念。
本章学习目标
类的封装
Java是面向对象的程序设计语言,在Java中一切都是类和作为类的实体的对象。在面向对象的程序设计中,封装主要是指将数据、对数据的操作以及与外界的交互封装在类中。所以创建一个类时,通常包括以下的内容:
(1)定义成员变量,包括实例成员和类成员。
(2)定义成员方法,包括实例方法和类方法。
(3)规定类是否可以被继承、变量是否被隐藏、方法是否可以被覆盖等特性。
继承是面向对象程序设计的重要特性。当定义了一个称为父类的类以后,另一个或几个子类可以继承父类的所有特性,包括成员变量、成员方法等。通过继承机制,子类能复用父类的代码,同时又允许子类添加自己特有的变量和方法,这样减少了代码的重复,提高了代码的质量和可靠性。
类的继承
创建子类习目标
继承使用关键字extends来实现,新定义一个类时可以指定该类继承那一个父类,此时定义类的语法是:
[类修饰符] class 类名[extends 父类名]
以下给出一个说明类的继承关系的例子。
实例类的继承
类的继承
this对象和super对象
在Java中,this用来代表当前正在操作的对象。
例如,Java规定,当局部变量与成员变量同名时局部变量会屏蔽成员变量,这时如果要引用成员变量,就必须使用this来引用。请看下面的程序:
实例 this引用的例子
在Java中,super用来代表父类。
Java规定,如果子类中定义的成员变量与父类中定义的成员变量同名,则父类中的同名成员变量被屏蔽;如果子类中定义的成员方法与父类中定义的成员方法同名,并且参数的个数和类型以及返回值的类型也相同,则父类中的同名成员方法被屏蔽。这时如果要引用父类中的成员变量或成员方法,就必须使用super来引用。请看下面的程序:
类的继承
实例 super引用的例子
final关键字和abstract关键字
final关键字用于声明最终类和最终方法。
最终类是不能被继承的类,最终类不能有子类。如果不希望某个类被继承,就可以用final关键字把这个类声明为最终类。声明最终类的格式是:
final class className
有时只想保护类中的某个方法不允许被子类覆盖,此时可以用final关键字把这个方法声明为最终方法,声明最终方法的格式是:
类的继承
final void methodName ( )
类的继承
abstract关键字用于声明抽象方法和抽象类。
声明抽象方法的格式是:
abstract void methodName ( )
一旦一个方法声明为抽象方法,这个方法就必须被子类的方法覆盖,通常用于确保一个方法要求必须被子类方法覆盖的情况。但是构造方法不能声明为抽象方法,而且abstract关键字不能与static关键字同时使用。
任何包括抽象方法的类必须声明为抽象类。抽象类不能被实
例化,但是可以被继承,继承抽象类的子类可以被实例化。声明抽象类的格式是:
abstract class className
抽象类的子类必须实现父类中的所有抽象方法,除非自己也声明为抽象类。声明抽象类的意义是描述其中抽象方法的结构,而不实现这些方法,它作为一个父类被所有的子类所共享,其中的方法由各个子类分头去实现。
一个类不能同时既是最终类有时抽象类,即final和abstract不能一起使用。
类的继承
类的多态性
多态的概念
简单地说,多态是指一个同名的方法可以有不同的版本,调用这个方法时只是调用了该方法不同版本中的一个。多态性使向系统添加新的功能变得容易,使得调用者的调用格式趋于一致,是降低软件复杂性提高软件易用性的有效技术。
实现多态性有两种途径,分别是方法的重载和方法的覆盖。
方法的重载
方法的重载是指在一个类中有若干同名的方法,区别这些方法的依据是参数的个数、参数的数据类型或者返回值的数据类型彼此不同。
类的多态性
例如,取绝对值函数abs需要处理不同的数据类型,即该函数应能对各种数值型数据进行绝对值运算并返回具有相同数据类型的返回值,为此可以声明四种名为abs的方法,但是它们的参数的数据类型和返