|
第五章
类的继承性与多态性(二)
复习:
构造方法不能继承
v
由于父类构造方法与父类同名,子类构造方法与子类同名,所以子类无法继承父类的构造方法。
v
子类通过使用super()调用父类的构造方法
v
Super()只能出现在子类的构造方法中,并且必须是子类构造方法中的第一条语句。
类的多态
v
一个类中可以定义多个同名的方法,只要参数的个数和类型不同,这种现象称为类的多态。
v
类的多态是发生在一个类中。
v
类的多态性体现在方法的重载上
方法的重载
v
方法的重载是指对同名方法的重新定义
v
同名的不同方法可以通过不同的参数来区分
v
参数不同包括参数的个数不同或参数的类型不同
v
方法重载举例:
class M{
public int Max(int x, int y){
if(x<y) return y;
else return x; }
public int Max(int x, int y, int z){
int k;
if(x<y) k=y;
else k=x;
if(k<z) return z;
else return k; }
}
构造方法重载
v
重载构造方法的目的是提供多种初始化对象的能力。
class MyClass{
private int x, y;
MyClass (int m){ x=m; }
MyClass (int m, int n){ x=m; y=n; }
}
习题讲解
v
创建一个Fraction类执行分数运算。要求如下:
Ø
用整型数表示类的private成员变量:f1,f2
Ø
提供构造方法,将分子存入f1,分母存入f2
Ø
提供两个分数相加的运算方法,结果分别存入f1,f2
Ø
提供两个分数相乘的运算方法,结果分别存入f1,f2
Ø
以a/b的形式打印Fraction数
Ø
编写主控程序运行分数运算
一.需求分析:
1.
根据题目的要求,本程序要写两个类,一个是类Fraction,一个是程序入口类(即包含main()方法的类)。
2.
程序的主要功能是在类Fraction中实现的。类Fraction的功能包括
l
构造一个分数
l
提供分数相加功能的实现方法
l
提供分数相减功能的实现方法
l
提供分数相乘功能的实现方法
l
提供分数相除功能的实现方法
l
以a/b的形式在屏幕上输出分数
3.
程序入口类实现调用类Fraction进行各种分数运算的功能。
要求:根据上面的功能写出一个简单的需求分析文档。
二.设计并编写代码实现程序
1.在编写程序代码前,根据前面使用个体软件过程方法收集的数据,进行本程序的规模估计,填写规模估计表,如下:
学生Y的程序规模估计
学生 学生Y 日期
10/7/96
教员 老师Z 课程
CLI
|
程序 |
代码行 |
以前的功能 |
估计的功能 |
最小 |
平均 |
最大 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.学生进行编码
源程序:
class
Fraction
{
private int f1,f2;
Fraction(int z,int m){
f1=z;
f2=m;
}
public void add(Fraction a){
f1=f1*a.f2+a.f1*f2;
f2=f2*a.f2;
}
public void sub(Fraction a){
f1=f1*a.f2-a.f1*f2;
f2=f2*a.f2;
}
public void mul(Fraction a){
f1=f1*a.f1;
f2=f2*a.f2;
}
public void div(Fraction a){
f1=f1*a.f2;
f2=f2*a.f1;
}
public void print(){
System.out.println(f1+"/"+f2);
}
};
public class A3
{
public static void main(String[] args)
{
Fraction x=new Fraction(1,2);
Fraction y=new Fraction(2,3);
x.add(y);
x.print();
x.sub(y);
x.print();
x.mul(y);
x.print();
x.div(y);
x.print();
}
}
3.要求学生编码结束后填写时间记录日志表,如下:
|
时间记录日志 |
|
|
学生 |
学生Y |
日期 |
10/19/05 |
|
|
教员 |
教师Z |
课程 |
Java |
|
|
日 期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活 动 |
备 注 |
C |
U |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
三.代码调试
要求学生对自己编写的代码进行复查,填写缺陷记录日志。
|
缺陷记录日志 |
|
学生 |
学生Y |
日期 |
10/19 |
|
教员 |
教师Z |
程序号 |
001 |
|
日 期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
相关缺陷 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|