public void display() //成员方法display()
{
super.display(); //执行父类的显示方法
System.out.println(“教师代码:”+teacherID);
System.out.println(“教师职位:”+position);
System.out.println(“主讲课程:”+courseName);
}
}
完成该类的定义之后,还需要一个程序使用这些类并对它们进行测试,测试程序如下:
例5.4:对上边创建的类的覆盖方法进行多态性测试。
//polymorphismDemo.java
public class polymorphismDemo
{
public static void main(String [ ] args)
{
Citizen [] citizenObj={ new Student(“[***********] ”, ”纪杨”, ”男”, ”1974.5.21”, ”920150208”, ”1992.9.1”,540),new Teacher (“[***********] ”, ”姜氏”, ”女”, ”1967.2.21”, ”1201”, ”教授”, ”物理学”)};
{
System.out.println(“第”+i+”次:”);
citizenObj[i-1].display(); //显示对象信息
}
}
在测试程序中,生成了一个Citizen 类型数组,各元素是其不同子类的对象,这样就可以使用一个Citizen 类型的变量来引用子类的对象,循环调用不同类型对象的display()方法,如图
5.2所示。这是由两个子类的情况,当然在多个子类时,也可以产生随机下标,从数组中随机选择对象,这是一个多态性应用的简单例子。大家可以参照例5.1编译、运行程序,思考一下程序的运行结果。
要使用多态性机制,必须具备如下条件:
1)子类对象的方法调用必须通过一个父类的变量进行。比如上例的Citizen 类型数组。
2)被调用的方法必须是覆盖的方法即在父类中也有该方法。
3)子类的方法特征与父类必须一致。
4)子类方法的访问权限不能比父类更严格。
5.2抽象类
类是对现实世界中实体的抽象,但我们不能以相同的方法为现实世界中所有的实体做模型,因为大多数现实世界的类太抽象而不能独立存在。
例如,我们熟悉的平面几何图形类,对于圆、矩形、三角形、有规则的多边形及其他具体的图形可以描述它的形状并根据相应的公式计算出面积来的。那么任意的几何图形又如何描述呢?它是抽象的,我们只能说它表示一个区域,它有面积。那么面积又如何计算呢,我们不能够给出一个通用的计算面积的方法来,这也是抽象的。在现实生活中,会遇到很多的抽象类,诸如交通工具类、鸟类等等。
5.2.1 抽象类的定义
在Java 中所谓的抽象类,即是在类说明中用关键字abstract 修饰的类。
一般情况下,抽象类中可以包含一个或多个只有方法声明而没有定义方法体的方法。当遇到这样一些类,类中的某个或某些方法不能提供具体的实现代码时,可将它们定义成抽象类。
定义抽象类的一般格式如下:
[访问限定符] abstract class 类名
{
//属性说明
…………
//抽象方法声明
„„„„
//非抽象方法定义
„„„„„
}
其中,声明抽象方法的一般格式如下:
[访问限定符] abstract 数据类型 方法名([参数表]);
注意:抽象方法只有声明,没有方法体,所以必须以“;”号结尾。
有关抽象方法和抽象类说明如下:
1)所谓抽象方法,是指在类中仅仅声明了类的行为,并没有真正实现行为的代码。也就是说抽象方法仅仅是为所有的派生子类定义一个统一的接口,方法具体实现的程序代码交给了各个派生子类来完成,不同的子类可以根据自身的情况以不同的程序代码实现。
2)抽象方法只能存在于抽象类中,正像刚才所言,一个类中只要有一个方法是抽象的,则这个类就是抽象的。
3)构造方法、静态(static )方法、最终(final )方法和私有(private )方法不能被声明为抽象的方法。
public void display() //成员方法display()
{
super.display(); //执行父类的显示方法
System.out.println(“教师代码:”+teacherID);
System.out.println(“教师职位:”+position);
System.out.println(“主讲课程:”+courseName);
}
}
完成该类的定义之后,还需要一个程序使用这些类并对它们进行测试,测试程序如下:
例5.4:对上边创建的类的覆盖方法进行多态性测试。
//polymorphismDemo.java
public class polymorphismDemo
{
public static void main(String [ ] args)
{
Citizen [] citizenObj={ new Student(“[***********] ”, ”纪杨”, ”男”, ”1974.5.21”, ”920150208”, ”1992.9.1”,540),new Teacher (“[***********] ”, ”姜氏”, ”女”, ”1967.2.21”, ”1201”, ”教授”, ”物理学”)};
{
System.out.println(“第”+i+”次:”);
citizenObj[i-1].display(); //显示对象信息
}
}
在测试程序中,生成了一个Citizen 类型数组,各元素是其不同子类的对象,这样就可以使用一个Citizen 类型的变量来引用子类的对象,循环调用不同类型对象的display()方法,如图
5.2所示。这是由两个子类的情况,当然在多个子类时,也可以产生随机下标,从数组中随机选择对象,这是一个多态性应用的简单例子。大家可以参照例5.1编译、运行程序,思考一下程序的运行结果。
要使用多态性机制,必须具备如下条件:
1)子类对象的方法调用必须通过一个父类的变量进行。比如上例的Citizen 类型数组。
2)被调用的方法必须是覆盖的方法即在父类中也有该方法。
3)子类的方法特征与父类必须一致。
4)子类方法的访问权限不能比父类更严格。
5.2抽象类
类是对现实世界中实体的抽象,但我们不能以相同的方法为现实世界中所有的实体做模型,因为大多数现实世界的类太抽象而不能独立存在。
例如,我们熟悉的平面几何图形类,对于圆、矩形、三角形、有规则的多边形及其他具体的图形可以描述它的形状并根据相应的公式计算出面积来的。那么任意的几何图形又如何描述呢?它是抽象的,我们只能说它表示一个区域,它有面积。那么面积又如何计算呢,我们不能够给出一个通用的计算面积的方法来,这也是抽象的。在现实生活中,会遇到很多的抽象类,诸如交通工具类、鸟类等等。
5.2.1 抽象类的定义
在Java 中所谓的抽象类,即是在类说明中用关键字abstract 修饰的类。
一般情况下,抽象类中可以包含一个或多个只有方法声明而没有定义方法体的方法。当遇到这样一些类,类中的某个或某些方法不能提供具体的实现代码时,可将它们定义成抽象类。
定义抽象类的一般格式如下:
[访问限定符] abstract class 类名
{
//属性说明
…………
//抽象方法声明
„„„„
//非抽象方法定义
„„„„„
}
其中,声明抽象方法的一般格式如下:
[访问限定符] abstract 数据类型 方法名([参数表]);
注意:抽象方法只有声明,没有方法体,所以必须以“;”号结尾。
有关抽象方法和抽象类说明如下:
1)所谓抽象方法,是指在类中仅仅声明了类的行为,并没有真正实现行为的代码。也就是说抽象方法仅仅是为所有的派生子类定义一个统一的接口,方法具体实现的程序代码交给了各个派生子类来完成,不同的子类可以根据自身的情况以不同的程序代码实现。
2)抽象方法只能存在于抽象类中,正像刚才所言,一个类中只要有一个方法是抽象的,则这个类就是抽象的。
3)构造方法、静态(static )方法、最终(final )方法和私有(private )方法不能被声明为抽象的方法。