-类继承与接口(三)实验报告_第1页
-类继承与接口(三)实验报告_第2页
-类继承与接口(三)实验报告_第3页
-类继承与接口(三)实验报告_第4页
-类继承与接口(三)实验报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

4、)的结果。class Aaa void show() System.out.println("Aaa中定义的show()"); void show(int i) System.out.println("Aaa中定义的show(int i)"); class Bbb extends Aaa void show() System.out.println("Bbb中定义的show()"); public static void main(String args) Aaa a = new Aaa(); Bbb b = new Bbb(); A

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

6、"Aaa中定义的show()"); class Bbb extends Aaa int 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); /考虑此处 S

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

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

9、示学习费用public double compareCost(Student otherStudent)/当前对象与参数对象的费用比较return this.cost() - otherStudent.cost(); /返回大于、等于、小于零的数字public String getName()return ; public void setName(String name) = name; class StudentCostToolstatic double sumCost(Student students)/计算students所有学生的费用之和doub

10、le sum = 0;for(int i=0;i<students.length;i+)sum = sum + studentsi.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

11、 index = 0;for(int i=0;i<students.length;i+)if(pareCost(studentsi) < 0)index = i;return studentsindex.cost();三、接口与抽象类实验1. 编译下面的程序, 指出错误.interface A /语句1 void show(); void show(int i) System.out.println("A show()"); (1) 是否出错? 出错原因? 是,接口A必须是抽象方法即不能有实现代码。(2) 如果将上面语句1的in

12、terface改为abstract class , 编译是否出错? (提示: 注意abstract修饰符) 是 。之后变成了抽象类,那么void show()前面也应该加absrtract(3)根据上面的(1)和(2), 可以看出接口与抽象类的什么区别? 接口中只能声明抽象方法,抽象类中既能声明抽象方法,也能声明非抽象方法,但抽象方法前面需要加上abstract。接口则不需要。2. 编译下面的程序, 指出错误.interface IA void show(); void show(int i);class A implements IA /语句1 public void show(int i)

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

14、ln("A show()"); class AbstractClassTest public static void main(String args) A a = new A(); (1) 编译是否出错? 出错 (2) 类A的定义编译是否出错? 说明什么?(考虑抽象类中是否可以没有抽象方法)不出错,因为抽象类中是否可以没有抽象方法4. 编译下面的程序, 回答问题abstract class A static abstract void show();class B extends A public static void main(String args) show();

15、 (1) 上面的程序编译是否出错?是(2) 如何改正?abstract class Apublic static abstract void show();5. 编译下面的程序, 回答问题interface IA int i; void show();(1) 上面的程序编译是否出错? 是 ,(2) 如果出错, 错在何处? I应该是一个静态常量 需要赋值6. 编译下面的程序, 回答问题.interface IA int i=100; void show(); /代码1interface IB int j=100; void show(int a); /代码2class A implements

16、IA,IB public void show()/代码3 public void show(int a) /代码4(1) 上面的程序编译是否出错? 否(2) 代码1和代码3的区别是什么? 同样, 代码2与代码4的区别是什么? 1 方法的声明,3是方法的实现7. 编译下面的程序, 回答问题.abstract class A void show1()abstract class B void show2() class C extends A,B void show3()(1) 上面的程序编译是否出错? 出错(2) 如果出错, 错在何处? 类不能多重继承8. 编译下面的程序, 回答问题.final

17、 class A void show()class B extends A void show2()(1) 上面的程序编译是否出错? 是 (2) 如果出错, 错在何处? Final定义的不能继承9. 编译下面的程序, 回答问题.class A final void show()class B extends A void show() System.out.println("aaa"); (1) 上面的程序编译是否出错? 出错(2) 如果出错, 错在何处? Final类不能被覆盖10. 编译下面的程序, 回答问题.interface IA /没有定义任何成员class B

18、/没有定义任何成员(1) 上面的程序编译是否出错? 否(2) 如果没有出错, 你可以得出什么结论? 接口和类都可以为空11编译并运行下面程序,分析运行结果interface IStudent void showDetail();class Student implements IStudent String name; int age; Student() Student(String name,int age) = name; this.age = age; public void showDetail() System.out.println(name+"t"+age); class GraduateStudent implements IStudent String name; int age; String major; GraduateStudent() GraduateStudent(Stri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论