Java语言中的接口与实现
文章目录
- Java语言中的接口与实现
- 一、实验目的:
- 二、实验要求:
- 三、提示:
- 四、实验小结:
一、实验目的:
1、掌握接口的设计过程;
2、理解接口中成员变量的访问权限;
3、掌握接口多继承的方式;
4、掌握接口回调方式;
5、掌握接口实现。
二、实验要求:
设计类和接口,要求所有可以拨号的设备都应该有拨号功能,所有播放设备都可以有播放功能,所有照相设备都有拍照功能。定义如下接口和类:
1)电话接口Telephone,具有拨号功能;
2)Dvd接口,具有播放音乐功能;
3)照相机抽象类Camera,具有照相功能;
4)手机类Mobile:继承抽象类、实现接口,重写其照相功能、拨号功能和播放功能;
5)一个人类Person,包含的方法有:使用拨号设备use(拨号设备),使用拍照设备use(拍照设备),使用播放设备use(播放设备),使用拨号播放拍照设备use(拨号、播放、拍照);
6)创建包含main方法的测试Test类,实例化人、Dvd、照相机、手机对象,并让人使用这些对象。
三、提示:
(1)首先创建:
接口Telephone,拥有一个拨号的方法,参数为String型的号码;
接口Dvd,拥有一个播放音乐的方法,参数是String型的歌曲名称;
抽象类Camera,拥有一个照相功能的方法,没有参数;
abstract class Camera { // 定义一个抽象类 Camera
abstract void photographing(); // 定义一个照相功能
}
interface Telephone{ // 定义一个接口 Telephone
void dial(String number); // 定义一个拨号功能
}
interface Dvd{ // 定义一个接口 Dvd
void play(String musicName); // 定义一个播放音乐功能
}
(2)创建一个接口实现类手机Mobile,继承抽象类Camera,实现其照相方法;实现implements接口Telephone、Dvd中的拨号方法、播放音乐方法;
class Mobile extends Camera implements Telephone, Dvd{ // 定义一个 Mobile 类, 继承自Camera 和 Telephone,Dvd
@Override
public void photographing() { // 实现照相功能
System.out.println("正在拍照中...");
}
@Override
public void dial(String number) { // 实现拨号功能
System.out.println("正在向“" + number + "”拨号...");
}
@Override
public void play(String musicName) { // 实现播放音乐功能
System.out.println("正在播放" + "《" + musicName + "》");
}
}
(3)创建一个Person类,利用方法重载:
定义一个use(Telephong telephone,String number)方法,调用telephone的拨号方法,实现拨号number的操作;
定义一个use(Dvd dvd,String music)方法,调用dvd的播放音乐方法,实现播放music音乐操作;
定义一个use(Camera camera)方法,调用camera的照相方法,实现照相机的照相操作;
定义一个use(Mobile mobile,String number,String music)方法,调用mobile的拨号方法,实现拨号number的操作;调用mobile的播放音乐方法,播放music的操作;调用mobile的照相方法,实现照相操作;
public class Person { // 定义一个Person类,实现use()的方法重载
public void use(Telephone telephone, String number){
telephone.dial(number);
}
public void use(Dvd dvd, String musicName){
dvd.play(musicName);
}
public void use(Camera camera){
camera.photographing();
}
public void use(Mobile mobile, String number, String musicName){
mobile.dial(number);
mobile.play(musicName);
mobile.photographing();
}
}
(4)创建一个Test类,在其main()方法中,利用“接口回调”:
定义一个Telephone接口变量,用接口实现类Mobile进行实例化;
定义一个Dvd接口变量,用接口实现类Mobile进行实例化;
定义一个Camera抽象类变量,用接口实现类Mobile进行实例化;
定义一个Mobile对象变量,用Mobile进行实例化;
定义一个Person对象变量,并用Person进行实例化;
接着用Telephone对象作为实参,调用Person对象的use方法,检查其拨号功能;
用Dvd对象作为实参,调用Person对象的use方法,检查其播放音乐的功能;
用Camera对象作为实参,调用Person的use方法,检查其照相功能;
用Mobile对象作为是实参,调用Person的use方法,检查其拨号、播放音乐、照相功能。
class Test{ // 定义一个Test类
public static void main(String[] args) { // 主入口函数
Telephone telephone = new Mobile();
Dvd dvd = new Mobile();
Camera camera = new Mobile();
Mobile mobile = new Mobile();
Person person = new Person();
person.use(telephone, "12138");
person.use(dvd, "东华和她");
person.use(camera);
person.use(mobile, "12138", "东华和她");
}
}
完整代码
package experiment12.java;
abstract class Camera { // 定义一个抽象类 Camera
abstract void photographing(); // 定义一个照相功能
}
interface Telephone{ // 定义一个接口 Telephone
void dial(String number); // 定义一个拨号功能
}
interface Dvd{ // 定义一个接口 Dvd
void play(String musicName); // 定义一个播放音乐功能
}
class Mobile extends Camera implements Telephone, Dvd{ // 定义一个 Mobile 类, 继承自Camera 和 Telephone,Dvd
@Override
public void photographing() { // 实现照相功能
System.out.println("正在拍照中...");
}
@Override
public void dial(String number) { // 实现拨号功能
System.out.println("正在向“" + number + "”拨号...");
}
@Override
public void play(String musicName) { // 实现播放音乐功能
System.out.println("正在播放" + "《" + musicName + "》");
}
}
public class Person { // 定义一个Person类,实现use()的方法重载
public void use(Telephone telephone, String number){
telephone.dial(number);
}
public void use(Dvd dvd, String music){
dvd.play(music);
}
public void use(Camera camera){
camera.photographing();
}
public void use(Mobile mobile, String number, String music){
mobile.dial(number);
mobile.play(music);
}
}
class Test{ // 定义一个Test类
public static void main(String[] args) { // 主入口函数
Telephone telephone = new Mobile();
Dvd dvd = new Mobile();
Camera camera = new Mobile();
Mobile mobile = new Mobile();
Person person = new Person();
person.use(telephone, "12138");
person.use(dvd, "东华和她");
person.use(camera);
person.use(mobile, "12138", "东华和她");
}
}
运行结果
四、实验小结:
抽象类和接口都是抽象的,抽象类是对事物抽象,接口是对行为抽象。
接口可以支持多继承,抽象类只支持单继承,在抽象类中可以有非抽象方法,但是接口只能有抽象方法。
接口回调就是方法调用的逆方法。