
第5章继承与多态 一、要点解析 1.教学内容 Jna语言的雅承:Java语言的多态:ana方法的重载:构造函登的雅承与重载:Java语言的包:Java 语言的接口。 维承是面向对象程序设计方法的一个重要手段。通过继承可以更有效地组织程序结构。明确类与类之 闻的关系。更充分地利用已有的类米完成更复桑、更深入的开发。 多志是指在一个程序中,同名的不同方法共存的情况。面向对象程序设计中多老的情况有多种。可通 过子类对父类方法的厦盖实现多态,也可以利用重载在同一个类中定文多个月名的不同方法实现多态, Jn语言可通过两种方式实呢多方。 ①通过子类对父类抽象方法的厦差实现多态: ②利用重载米实观多老即在同一个类中定义多个同名的不同方法米实现多态。 ()利用覆盖实现多态 覆盖是一种很重要的多志方式。在覆盖多态中进行方法调用时,如何区分这些洞名的不同方法? 在厦盖多态中,由于同名的不用方法是存在于不同的子类数(知:碰卡类、IC卡类、P卡类、200卡类 等)中,所以在调用方法时只雷要指明调用的是爆个类的方法,就可以很容易地区分不同的方法。 ②利用重载米实现多态 利用重载米实现多态是在同一个类中定义多个同名的不同方法来实现多老, 之所以同一个类中要定义多个同名的不同方法。是由于它们在完成同一个功能时,可能要适到不同的 具体情况,因此,需要定义含有不同的具体操作的方法,来代表多种具体的实现形式。 在多态重载中如何区分同名的不月方法 由于重载发生在具一个类里,因此,不能再用类名米区分不同的方法,面应采用不同的形式参数列表 (包括形式参数个数、类型、顺序的排列来区分重载的不可方法。 Jn语言不支持多重胜承,只支持单重壁承。然而在解决实际月思的程序设计中仅靠单重维承尚不能 解徒更复杂的问题。为了使va程序的类尽次结构更加合理,更符合实际问题的需要,Jvm把用于完成 特定功能的若干属性织成相对独文的属性集合。这种属性的集合就是接口。 J的接口是用来实现类何多重推承功能的结构。在接口体内定义了若干个抽象方法和常量用以实现 多重维成的功能。 2.教学要求 了解:Jva方法的重载:构造函数维承与重载的含义及应连循的原则:aa语言包的创建和引用:了 解接口的作用、定义及实现方法。 熟练掌握:以电话卡类为典型例题认真分析Jw父类与子类、域篷承和方法鞋承的授作过程并进一 步学会分析程序的方法
第 5 章 继承与多态 一、要点解析 1.教学内容 Java 语言的继承;Java 语言的多态;Java 方法的重载;构造函数的继承与重载;Java 语言的包;Java 语言的接口。 继承是面向对象程序设计方法的一个重要手段,通过继承可以更有效地组织程序结构,明确类与类之 间的关系,更充分地利用已有的类来完成更复杂、更深入的开发。 多态是指在一个程序中,同名的不同方法共存的情况。面向对象程序设计中多态的情况有多种,可通 过子类对父类方法的覆盖实现多态,也可以利用重载在同一个类中定义多个同名的不同方法实现多态。 Java 语言可通过两种方式实现多态。 ① 通过子类对父类抽象方法的覆盖实现多态; ② 利用重载来实现多态.即在同一个类中定义多个同名的不同方法来实现多态。 ⑴ 利用覆盖实现多态 覆盖是一种很重要的多态方式。在覆盖多态中进行方法调用时,如何区分这些同名的不同方法? 在覆盖多态中,由于同名的不同方法是存在于不同的子类(如:磁卡类、IC 卡类、IP 卡类、200 卡类 等)中,所以在调用方法时只需要指明调用的是哪个类的方法,就可以很容易地区分不同的方法。 ⑵ 利用重载来实现多态 利用重载来实现多态是在同一个类中定义多个同名的不同方法来实现多态。 之所以同一个类中要定义多个同名的不同方法,是由于它们在完成同一个功能时,可能要遇到不同的 具体情况,因此,需要定义含有不同的具体操作的方法,来代表多种具体的实现形式。 ⑶ 在多态重载中如何区分同名的不同方法 由于重载发生在同一个类里,因此,不能再用类名来区分不同的方法,而应采用不同的形式参数列表 (包括形式参数个数、类型、顺序的排列)来区分重载的不同方法。 Java 语言不支持多重继承,只支持单重继承。然而在解决实际问题的程序设计中仅靠单重继承尚不能 解决更复杂的问题。为了使 Java 程序的类层次结构更加合理,更符合实际问题的需要, Java 把用于完成 特定功能的若干属性组织成相对独立的属性集合。这种属性的集合就是接口。 Java 的接口是用来实现类间多重继承功能的结构。在接口体内定义了若干个抽象方法和常量用以实现 多重继成的功能。 2.教学要求 了解: Java 方法的重载;构造函数继承与重载的含义及应遵循的原则;Java 语言包的创建和引用;了 解接口的作用、定义及实现方法。 熟练掌握:以电话卡类为典型例题认真分析 Java 父类与子类、域继承和方法继承的操作过程并进一 步学会分析程序的方法

二、典型例题 2.I定义三个类Pem,Employee,Mage,类的层次关系如下图所示并对其进行测试. Person 上mpo心气 Manager ∥Ea42 Test java class Personf ∥定义一个Person类 public String name. ∥定义实例变量姓名 public String8tam){∥获取实例变量姓名 return name; class Employee extends Persont∥定义一个Employee类 public int employeeNumber. ∥定义实例变量雅员编写 public int getEmployeeNumber(){∥获取实例变量麻员编号 return employeeNumber: class Manager extends Employee!∥定义一个Manager类 public String responsibalities. ∥定文实例变量责任 public String getResponsibilitie以)【W获取实例变量责任 return responsibilities. public class Exam4_2Test{ ∥定义一个公共类 public static void main(String args)∥定义公共类中的mar)方法 Employee li-ew Employee(大∥创建一个雇员类的对象i li name ='Li Ming": ∥设置i的ame属性为r山Mie li employeeNumber 123456, ∥设置i的employeeNumber属性为I23456 Sem.out.println(li.getName()以.H输出i的ame属性值 Sycm.out.printn(ligetEmployeeNumber()∥输出i的employeeNumber属性值 Manager he "new Manager(. ∥创建一个经理类的对象e he name ='He Xia"; ∥设置he的nae属性为He Xia" he employeeNumber 543469. ∥设置he的employeeNumber属性为543469
二、典型例题 2.1 定义三个类 Person、Employee、Manager,类的层次关系如下图所示并对其进行测试。 // Exam4_2Test.java class Person{ // 定义一个 Person 类 public String name; // 定义实例变量姓名 public String getName() { // 获取实例变量姓名 return name; } } class Employee extends Person{ // 定义一个 Employee 类 public int employeeNumber; // 定义实例变量雇员编号 public int getEmployeeNumber() { // 获取实例变量雇员编号 return employeeNumber; } } class Manager extends Employee{ // 定义一个 Manager 类 public String responsibilities; // 定义实例变量责任 public String getResponsibilities() { // 获取实例变量责任 return responsibilities; } } public class Exam4_2Test { // 定义一个公共类 public static void main(String args[]){ // 定义公共类中的 main()方法 Employee li = new Employee(); // 创建一个雇员类的对象 li li.name = "Li Ming"; // 设置 li 的 name 属性为"Li Ming" li.employeeNumber = 123456; // 设置 li 的 employeeNumber 属性为 123456 System.out.println(li.getName()); // 输出 li 的 name 属性值 System.out.println(li.getEmployeeNumber()); // 输出 li 的 employeeNumber 属性值 Manager he = new Manager(); // 创建一个经理类的对象 he he.name = "He Xia"; // 设置 he 的 name 属性为"He Xia" he.employeeNumber = 543469; // 设置 he 的 employeeNumber 属性为 543469 Person Employee Manager

he responsibalities="Intemet project":∥设置he的responsibilities属性为Internet proje' Sem.out.println(he.getName()以∥输出be的name属性 Sycm.out.println(he.getEmployceNumber(∥输出he的EmployeeNumber属t性 Smem.out.printin(he getResponsibilities)火∥输出be的Respoesibilities属性 以上程序的运行结果: LiMing 123456 He Xia 543469 Imernet project 22定义一个Shpe2D接口,具有数据pm与计算而积的方法:定义一个Calc接口,具有设置颜色的功能: 定义一个Cirele类,实现Shape2D、Color接口. ∥Shp2Dva interface Shape2D ∥声明Shape2D接口 double pi=3.14; ∥数据成员一定要初始化 double area( ∥抽象方法,不需要定义处理方式 ∥Color.jaa interface Color void买tCalor(String如r士∥抽象方法,不需要定义处理方式 /Circle java class Cirele implements Shape2D.Color∥实现Cirele类 double radius String color; public Circle(double r) ∥构造方法 radius=r. public double area() ∥定义are)的处理方式
he.responsibilities = "Internet project"; // 设置 he 的 responsibilities 属性为"Internet project" System.out.println(he.getName()); // 输出 he 的 name 属性 System.out.println(he.getEmployeeNumber()); // 输出 he 的 EmployeeNumber 属性 System.out.println(he.getResponsibilities()); // 输出 he 的 Responsibilities 属性 } } 以上程序的运行结果: Li Ming 123456 He Xia 543469 Internet project 2.2 定义一个 Shape2D 接口,具有数据 pi 与计算面积的方法;定义一个 Color 接口,具有设置颜色的功能; 定义一个 Circle 类,实现 Shape2D、Color 接口。 // Shape2D.java interface Shape2D{ // 声明 Shape2D 接口 double pi=3.14; // 数据成员一定要初始化 double area(); // 抽象方法,不需要定义处理方式 } // Color.java interface Color{ void setColor(String str); // 抽象方法,不需要定义处理方式 } // Circle.java class Circle implements Shape2D,Color // 实现 Circle 类 { double radius; String color; public Circle(double r) // 构造方法 { radius=r; } public double area() // 定义 area()的处理方式 {

return (p"radius"radius): public void setColor(String str) ∥设置圆类对象的顾色 color=str. System.out println("color*+color) ∥Multilmter face Tester.java public elass MultilnterfaceTester publie statie void main(String args[)! Circle cirmnew Cirele(2.0) cir.setColor("blue"); System.out.printl"Are图=”+cir.area)i 以上程序的运行结果: color-blue ea-12.56
return (pi*radius*radius); } public void setColor(String str) // 设置圆类对象的颜色 { color=str; System.out.println("color="+color); } } // MultiInterfaceTester.java public class MultiInterfaceTester{ public static void main(String args[]) { Circle cir=new Circle(2.0); cir.setColor("blue"); System.out.println("Area = " + cir.area()); } } 以上程序的运行结果: color=blue Area = 12.56