int total = 0;
double average = 0;
for (int i = 0; i < CourseNo; i++) {
total=total+courses[i];//代码4 // 累加各门课程成绩 };
average = total / CourseNo;
if (average>=80&&average<100) courseGrade = \优秀\
else if (average>=70&&average<80) courseGrade = \良好\ else if (average>=60&&average<70) courseGrade = \一般\ else if (average>=50&&average<60) courseGrade = \及格\ else courseGrade = \不及格\ } }
class Postgraduate extends Student { public Postgraduate(String name) { super(name); type = \研究生\ }
public void calculateGrade() { int total = 0;
double average = 0;
for (int i = 0; i < CourseNo; i++) { total += courses[i]; };
average = total / CourseNo;
if (average>=90&&average<100) courseGrade = \优秀\
else if (average>=80&&average<90) courseGrade = \良好\ else if (average>=70&&average<80) courseGrade = \一般\ else if (average>=60&&average<70) courseGrade = \及格\ else courseGrade = \不及格\ } }
public class Polymorphism {
public static void main(String[] args) { Student[] students = new Student[5];
students[0] = new Undergraduate(\陈建平\
students[1] = new Undergraduate(\鲁向东\ students[2] = new Postgraduate(\匡晓华\ students[3] = new Undergraduate(\周丽娜\
students[4] = new Postgraduate(\梁欣欣\代码5 // 创建姓名为梁欣欣的Postgraduate对象students[4]
for (int i=0; i<5 ;i++) {
students[i].setCourseScore(0,87); students[i].setCourseScore(1,90); students[i].setCourseScore(2,78); }
for (int i=0; i<5 ;i++) {
students[i].calculateGrade(); }
System.out.println(\姓名\类型\成绩\ System.out.println(\
for (int i=0; i<5 ;i++) {
System.out.println(students[i].getName( )+\ students[i].getType( )+\ students[i].getCourseGrade( )); } } }
3、结果
4、练习
(l) 在 Polymorphism 类中有一个循环语句用来计算每个学生的成绩等级 for(int i=0;i<5;i 十 +){
student[i].calculateGrade(); }
请问这里的 calculateGrade() 方法是按照研究生的标准还是按照本科生的标准来计算的。 当对象是研究生时按照研究生的标准,是本科生按照本科生的标准来计算 (2) 现在请在程序 Polymorphism 类的 main() 方法中添加如下的语句 Student st=new Student (\李明 \
此时编译是否会报错 , 如有错误 , 请解释原因。 abstract类不能用new运算符创建对象
(3) 在程序中要判断 student[i] 中存放的究竟是 Undergraduate 对象还是 Postgraduate对象 , 只需要调用 student[i].getType() 方法即可 , 然而 Java 提供了一个 instanceof 运算也可以完成这一任务 , 它能判断出一个对象所属的类 , 请将以下代码添加到程序中进行测试。
for (int i=0;i<5;i++){
if(students[i] instanceof Undergraduate)
System.out.println(students[i].getName()+\是本科生 \else
System.out.println(students[i].getName()+\是研究生 \
(4)现在请模仿本程序 , 新增一个高中生类 , 它计算成绩等级的标准采用如下方法 , 然后 在主程序中测试并使用它。 80~100 好 60~80 中 60 以下 差
class High extends Student { public High(String name) { super(name); type = \高中生\ }
public void calculateGrade() { int total = 0;
double average = 0;
for (int i = 0; i < CourseNo; i++) { total += courses[i]; };
average = total / CourseNo;
if (average>=80&&average<100) courseGrade = \好\
else if (average>=60&&average<80) courseGrade = \中\ else courseGrade = \差\ } }
实验三
1、分别编写四个类Point,Point2D,Point3D,Test来表示一维、二维和三维的点及测试类,使之满足下列要求:
(1) Point类的成员变量和成员方法如下所示: 成员变量 int x;
成员方法 ①构造函数Point(int x),实现对成员变量x的初始化 ② void offset(int a)实现对一维点x坐标的平移
③ double distance(Point p)计算当前点到一维点p的距离 (2) Point2D类是Point类的直接子类,其成员变量和成员方法如下所示:
成员变量 int x,y;(分别为二维空间的X,Y方向坐标),x可从父类继承。 成员方法 ①构造函数Point2D(int x, int y),实现对成员变量x,y的初始化,可先调
用父类的构造函数super(x),实现对x坐标的初始化。
② void offset(int a, int b)实现对二维点坐标的平移,可先调用父类的offset函数实现对x坐标的平移。
③ double distance(Point p)覆盖父类的距离函数,计算当前点到二维点p的距离
(3) Point3D类是Point2D类的直接子类,其成员变量和成员方法如下所示:
成员变量 int x,y,z;(分别为三维空间的X,Y,Z方向坐标),x,y可从父类继承。 成员方法 ①构造函数Point3D(int x, int y,int z),实现对成员变量x,y,z的初始化,
可先调用父类的构造函数super(x,y),实现对x ,y坐标的初始化。
② void offset(int a, int b,int c)实现对三维点坐标的平移,可先调用父类
的offset函数实现对x,y坐标的平移。
③ double distance(Point p)覆盖父类的距离函数,计算当前点到三维点p的距离
(4)在测试类Test的主函数main()中实例化两个Point2D的对象p2d1,p2d2,打印出它们之间的距离,再实例化两个Point3D的对象p3d1,p3d2,打印出他们之间的距离。 2、代码 class Point{ int x;
Point(int x){ this.x=x; }
void offset(int a){ x=x+a; }
double distance(Point p){
return Math.abs(this.x- p.x); } }
class Point2D extends Point{ int x,y;
Point2D(int x, int y){ super(x); //this.x=x; this.y=y; }
void offset(int a, int b){ super.offset(a); y=y+b; }
double distance(Point p){ return p.x),2)+Math.pow(Math.abs(this.y-y),2)); } }
class Point3D extends Point2D{ int x,y,z;
Point3D (int x, int y,int z){ super(x,y); this.z=z; }
void offset(int a, int b,int c){ super.offset(a,b); z=z+c; }
Math.sqrt(Math.pow(Math.abs(this.x-