-类继承与接口(三)实验报告

上传人:第*** 文档编号:34250312 上传时间:2018-02-22 格式:DOC 页数:12 大小:517.60KB
返回 下载 相关 举报
-类继承与接口(三)实验报告_第1页
第1页 / 共12页
-类继承与接口(三)实验报告_第2页
第2页 / 共12页
-类继承与接口(三)实验报告_第3页
第3页 / 共12页
-类继承与接口(三)实验报告_第4页
第4页 / 共12页
-类继承与接口(三)实验报告_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《-类继承与接口(三)实验报告》由会员分享,可在线阅读,更多相关《-类继承与接口(三)实验报告(12页珍藏版)》请在金锄头文库上搜索。

1、浙江大学城市学院实验报告课程名称: 面向对象程序设计 实验项目名称: 类继承与接口 (三) 学生姓名: 专业: 软件工程 学号: 实验地点: 实验日期: 年 月 日【实验目的】1巩固 Java 类继承的相关知识2理解对象上转型技术的优点和用途。3掌握接口的特点4接口与抽象类的异同之处【实验内容】一、类继承相关知识强化1. 执行以下程序,给出执行 Bbb 的结果,并说明指出类 Bbb 的 this.i 与 super.i 的含义(即它们都对应哪个变量)。class Aaaint i;Aaa(int a) i = a;class Bbb extends Aaaint j,k;Bbb(int i)s

2、uper(i);j = this.i;k = super.i;public static void main(String args)Bbb b = new Bbb(18);System.out.println(b.j +t + b.k);执行 Bbb 的结果: this.i 与 super.i 的含义(即它们都对应哪个类中定义的变量):this.i 和 super.i 都对应 Aaa 中的变量2接着上面例子,将类 Bbb 改写为以下代码,请写出程序运行结果,并说明这个例子与上面例子的区别。class Bbb extends Aaaint i= -1,j= -1,k= -1; /比上面例子增加

3、一个实例变量 i;Bbb(int i)super(i);j = this.i; /本语句含义是:k = super.i; /本语句含义是:public static void main(String args)Bbb b = new Bbb(18);System.out.println(b.j +t + b.k);执行 Bbb 的结果:这个例子与上面例子的区别:this.i 对应 Bbb 中的 isuper.i 对应 Aaa 中的 i3.对以下程序,给出执行 Bbb 的结果,并分析 Bbb 中 main 方法中 a.show(1), b.show(1),c.show(1)的结果。class A

4、aavoid show() System.out.println(Aaa 中定义的 show(); void show(int i) System.out.println(Aaa 中定义的 show(int i);class Bbb extends Aaavoid show() System.out.println(Bbb 中定义的 show(); public static void main(String args)Aaa a = new Aaa();Bbb b = new Bbb();Aaa c = new Bbb();a.show(1);b.show(1);c.show(1);执行 B

5、bb 的结果:上面 a.show(1)执行了那个类中定义的方法: 上面 b.show(1);执行了那个类中定义的方法: 上面 c.show(1)执行了那个类中定义的方法: 分析: 因为执行的是有参数的 void show()所以调用的是 Aaa 中的方法。C 是上转型所以也是调用 Aaa 中的方法4. 对以下程序,给出执行 Bbb 的结果,并分析这个例子结果与前面第 4 个例子,你可以得出什么结论。class Aaaint i = 10;static void show() System.out.println(Aaa 中定义的 show(); class Bbb extends Aaaint

6、 i = 20;static void show() System.out.println(Bbb 中定义的 show();public static void main(String args)Aaa a = new Aaa();Bbb b = new Bbb();Aaa c = new Bbb();a.show();b.show();c.show();(Bbb)c).show();System.out.println(c.i); /考虑此处System.out.println(Bbb)c).i); /考虑此处执行 Bbb 的结果: (Bbb)c).show()执行结果: System.ou

7、t.println(c.i)执行结果: System.out.println(Bbb)c).i)执行结果: 分析与结论:C 进行的向上转型,将子类对象引用转换为超类类型。所以 c.i 引用的是超类中的 I 而也可以通过(Bbb)c 向下转型二、程序分析思考以下是例 5.22 的部分关键代码,请分析思考以下问题:(1)Student 类中设计抽象方法 cost 会带来什么好处?因为不同的学生所需要的学费不同,所以用抽象 cost 方法在不用的学生中调用 cost 执行不同的代码返回对应的值。(2)Student 类的 compareCost 方法可以用于比较哪些类型的对象?如果没有设计抽象方法

8、cost,那么会发生什么问题?可以比较上转型对象和子类对象。如果没有抽象方法 cost 那么就必须在每一个子类都编写一个 compareCost 导致太多的重复代码。注意:分析重点是软件设计的通用性考虑。abstract class Student /定义学生对象的抽象超类private String name;public Student(String name) this.name = name; public abstract double cost();/声明抽象方法,表示学习费用public double compareCost(Student otherStudent)/当前对象与

9、参数对象的费用比较return this.cost() - otherStudent.cost(); /返回大于、等于、小于零的数字public String getName()return this.name; public void setName(String name) this.name = name; class StudentCostToolstatic double sumCost(Student students)/计算 students 所有学生的费用之和double sum = 0;for(int i=0;istudents.length;i+)sum = sum + s

10、tudentsi.cost();return sum;static double averageCost(Student students)/计算 students 学生的平均费用return sumCost(students)/students.length;static double maxCost(Student students)/计算 students 所有学生的费用最大值if(students.length = 1) return students0.cost();int index = 0;for(int i=0;istudents.length;i+)if(pareCost(s

11、tudentsi) 0)index = i;return studentsindex.cost();三、接口与抽象类实验1. 编译下面的程序, 指出错误.interface A /语句 1void show();void show(int i)System.out.println(A show();(1) 是否出错? 出错原因?是,接口 A 必须是抽象方法即不能有实现代码。(2) 如果将上面语句 1 的 interface 改为 abstract class , 编译是否出错?(提示: 注意 abstract 修饰符 )是 。之后变成了抽象类,那么 void show()前面也应该加 absr

12、tract(3)根据上面的(1)和(2), 可以看出接口与抽象类的什么区别?接口中只能声明抽象方法,抽象类中既能声明抽象方法,也能声明非抽象方法,但抽象方法前面需要加上 abstract。接口则不需要。2. 编译下面的程序, 指出错误.interface IAvoid show();void show(int i);class A implements IA /语句 1public void show(int i) /语句 2System.out.println(A show();(1) 上面的程序编译是否出错? 出错原因?出错,void show 没有实现 (2) 如果将语句 1 中的 cl

13、ass 改为 abstract class, 编译是否出错 ? 为何?否,因为抽象类可以不具体实现。(3) 如果将语句 2 中的 public 删除, 编译是否出错? 为何?出错, 因为 interface 中的方法都是 public 所以子类中也应该声明为 public3. 编译下面的程序, 回答问题abstract class A public void show()System.out.println(A show();class AbstractClassTestpublic static void main(String args)A a = new A(); (1) 编译是否出错?

14、 出错 (2) 类 A 的定义编译是否出错? 说明什么?(考虑抽象类中是否可以没有抽象方法)不出错,因为抽象类中是否可以没有抽象方法4. 编译下面的程序, 回答问题abstract class Astatic abstract void show();class B extends Apublic static void main(String args)show();(1) 上面的程序编译是否出错?是(2) 如何改正?abstract class Apublic static abstract void show();5. 编译下面的程序, 回答问题interface IAint i;voi

15、d show();(1) 上面的程序编译是否出错?是 ,(2) 如果出错, 错在何处?I 应该是一个静态常量 需要赋值6. 编译下面的程序, 回答问题.interface IAint i=100;void show(); /代码 1interface IB int j=100;void show(int a); /代码 2class A implements IA,IBpublic void show()/代码 3public void show(int a) /代码 4(1) 上面的程序编译是否出错?否(2) 代码 1 和代码 3 的区别是什么 ? 同样, 代码 2 与代码 4 的区别是什么?1 方法的声明,3 是方法的实现7. 编译下面的程序, 回答问题.abstract class A void show1()abstract class Bvoid show2() class C extends A,B

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号