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

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

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

1、浙江大学城市学院实验报告课程名称: 面向对象程序设计 实验项目名称: 类继承与接口(四) 学生姓名: 专业: 学号: 实验地点: 实验日期: 年 月 日【实验目的】1巩固接口的相关知识2理解接口回调技术3掌握对象上转型与接口回调两种技术的相同之处和不同之处。【实验内容】一、对象的类型实验 请运行以下程序的 Test 类,并回答问题。interface IAinterface IBinterface IC extends IA,IBclass A implements ICclass B extends Apublic class Testpublic static void main(Stri

2、ng args)B b = new B();System.out.println(b instanceof B);System.out.println(b instanceof A);System.out.println(b instanceof IC);System.out.println(b instanceof IA);System.out.println(b instanceof IB);System.out.println(b instanceof Object);(1)写出上述程序的运行结果。(2)分析上述运行结果?b 所引用对象可以转型为哪些类型?B 所引用的对象可以转型为 B,

3、IA,A,IC,IB,Object(3)通过上述实验,您能得出什么结论?继承类的下端类可以自动向上转型或接口二、接口多重继承的成员歧义问题实验1. 接口静态常量继承的歧义问题与解决请看下面的程序,然后回答问题。interface IApublic static final int MAX = 200;public static final int MIN = 100;interface IBpublic static final double MAX = 1000;interface IC extends IA,IBpublic abstract void c();class A implem

4、ents ICpublic void c() System.out.println(MAX);class B implements IA,IBpublic void d() System.out.println(MAX);请回答以下问题:(1)上述程序的接口 IC 有没有错误?为什么?没出错,接口可以多重继承。(2)上述程序编译会不会出现错误?如果有错误,请说明,并改正错误。出错,因为 A 继承了 IC 又继承了 IA,IB 里面的 MAX 不能确定来自哪一个接口。class A implements ICpublic void c() System.out.println(IA.MAX);(

5、3)根据上述两个问题的分析,你可以得出什么结论?因为接口可以多重继承,所以在调用时要指明哪个接口2. 接口抽象方法继承的歧义问题与解决请看下面的程序,然后回答问题。interface IApublic abstract int c();public abstract int c(int x);interface IBpublic abstract void c();public abstract int c(int x);public abstract int c(double x);interface IC extends IA,IBpublic abstract int c(double

6、x);abstract class A implements IA,IB 请回答以下问题:(1)接口 IC 从接口 IA 和 IB 中继承的抽象方法“int c(int x);”有没有歧义问题?没有 ,同名抽象方法会覆盖(2)上述程序的接口 IC 有没有错误?如果有错误,请说明,并改正错误。因为 IC 出现方法 C 的重定义,interface IBpublic abstract int c();public abstract int c(int x); public abstract int c(double x);(3)根据上述两个问题,你可以得出什么结论?结论是多重继承过程中,同名方法之

7、间会存在覆盖和重载关系,并且不能出现重定义现象。这与静态 final 域的重名是有所不同的。三、接口覆盖多态实验请看下面的程序,然后回答问题。interface IApublic abstract void show();class A implements IApublic void show() System.out.println(AAAA);class B implements IApublic void show() System.out.println(BBBB);public class Testpublic static void main(String args)IA a =

8、 new IA4;a0 = new A();a1 = new B();a2 = new B();a3 = new A();for(int i=0;ia.length;i+)ai.show();请回答以下问题:(1)写出上述程序的运行结果。(2)根据上述实验的结果,说明接口覆盖多态的特点。接口中声明的同一个抽象方法,可以在实现它的不同类中有不同的实现方法。而通过接口类型去指向实现类对象时,调用同样的方法会出现不同执行方式,这就是接口方法覆盖多态。四、接口回调和上转型对象的比较实验1. 使用接口回调技术的程序interface IApublic abstract void show();class

9、 A implements IApublic void show() System.out.println(AAAA);class B implements IApublic void show() System.out.println(BBBB);public class Teststatic void method(IA a)for(int i=0;ia.length;i+)ai.show();public static void main(String args)IA a = new IA4;a0 = new A();a1 = new B();a2 = new B();a3 = new

10、A();method(a);2. 使用上转型对象技术的程序class SuperClassApublic abstract void show();class A extends SuperClassApublic void show() System.out.println(AAAA);class B extends SuperClassApublic void show() System.out.println(BBBB);public class Teststatic void method(SuperClassA a)for(int i=0;ia.length;i+)ai.show()

11、;public static void main(String args)SuperClassA a = new SuperClassA4;a0 = new A();a1 = new B();a2 = new B();a3 = new A();method(a);请回答以下问题:(1)第一个程序的运行结果是什么?(2)第二个程序的运行结果是什么?(3)上述两个程序说明了接口回调技术和上转型对象技术有什么共同点? 共同点在于这两种方法都可以实现方法覆盖多态,通过继承链中上层的超类或接口的引用来指向不同的派生类的不同对象,同时依据抽象方法所规定的方法名来实现不同的操作(4)请结合教科书的内容,说明了接口回调技术和上转型对象技术有什么不同的适用场合?(提示:主要从多重继承的角度考虑)抽象类的继承与接口的实现上最大的区别就是单继承(抽象类)和多继承(接口)的区别,当我们在继承关系上需要多重继承时,必须使用接口回调技术,而如果是单继承则可以使用抽象类上转型技术。同时考虑到抽象类内部可以存在非抽象方法和域,所以当这些元素成为必要时同样要使用上转型技术。实验报告要求将编程题源程序、运行结果,以及实验中遇到的问题和解决问题的方法,写在实验报告上。

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

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

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