实验三 面对接口编程
一、实验目的及要求
1.实验目的
1)掌握面对抽象编程的相关基本知识。
2)掌握对Java语言中接口的基本知识及其使用。
3)掌握利用接口在程序设计中实现相关功能的语法知识及编程实现。
2.实验要求
1)深刻理解并认识面对抽象编程的知识与应用;
2)深刻理解并认识接口在程序设计上的功能及其编程实现;
3)懂得编写相关程序对所理解的内容进行实验;
4)在实验过程中,保持个人的独立思考和解决问题的能力;
5)在本次实验过程中,要深刻保持个人注意力集中;
6)在本次实验过程中,要时刻总结经验与教训;
二、实验环境(工具、配置等)
1.硬件要求:一台可正常启动的计算机。
2.软件要求:不限,但建议使用Java集成开发环境eclipse。
三、实验内容(实验方案、实验步骤、设计思路等)
1.实验方案:在复习及正确掌握相关知识后,编写面对接口编程的简单测试程序,进行程序的调试及改错,并在此过程中验证利用接口实现各种功能的想法。
2.实验步骤:
1)首先创建一个接口Animal。
2)在接口中定义方法eat()、travel()、noOfLegs()。
3)创建Mammallnt类实现接口中的三个方法,并新定义cry()方法。
4)创建一个依赖Mammallnt类的M类,定义get()方法实现回调方法noOfLegs()。
5)创建一个Main类,结合以上类与接口,输出实验结果。
6)总结实验过程中产生的错误及应对方法。
3.设计思路:首先定义接口及其相关方法,定义Mammallnt和M两个类,利用Mammallnt类实现接口中的三个方法,并在Mammallnt构造方法中将M对象作为参数传进来,之后在cry()方法中去调用m2的get()方法,利用Main类进行对实现接口中的普通方法及回调方法noOfLegs()做整合,最后对程序进行具体的完善步骤后,调试并运行出具体结果。
四、实验结果与分析
1.在成功进行实验步骤后,得出相关结果。实验效果图如图1所示:
2.对哺乳动物Mammallnt类的定义,如图2所示:
实验分析:
1.实验遇到的问题:
1)在完成对Mammallnt类的声明后,程序报错。
2)在类中重写接口中的方法时,程序出现错误。
3)在程序成功运行后,发现实现回调的代码还可优化。
2.问题解决的方法:
1)经过对错误代码部分的调试后,得知在类声明中,Implements应放在class后面。
2)经过对错误代码调试后,得知在重写过程中方法名要保持不变和返回类型都应不变。
3)经过思考后,发现可利用“new Thread(new Runnable(){public void run(){}).start();}”结构新建一个线程来实现回调。
五、附源程序
package edu.shiyan.san;
// 接口Animal
interface Animal {
public void eat();
public void travel();
public void noOfLegs(String result);
}
// 哺乳动物类
public class MammalInt implements Animal{
private M m2;
public MammalInt(M m2){
this.m2 = m2;
}
public void eat(){
System.out.println("鲸鱼吃小鱼");
}
public void travel(){
System.out.println("随洋流迁移");
}
// 回调方法noOfLegs()
public void noOfLegs(String result){
System.out.println("没有腿的哺乳动物:"+result);
}
public void cry() {
m2.get(MammalInt.this);
System.out.println("呜呜呜~");
}
}
public class M {
public void get(Animal animal) {
// TODO 自动生成的方法存根
// 建立一个新线程加快效率
new Thread(new Runnable(){
public void run(){
animal.noOfLegs("鲸鱼");
}
}).start();
}
}
// 主类
public class Main{
public static void main(String[] args){
M m2 = new M();
MammalInt m = new MammalInt(m2);
m.eat();
m.travel();
m.cry();
}
);
}
}
// 主类
public class Main{
public static void main(String[] args){
M m2 = new M();
MammalInt m = new MammalInt(m2);
m.eat();
m.travel();
m.cry();
}
}