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", "东华和她");
    }
}

运行结果

java 对外提供接口方式 java语言通过接口支持_Mobile

四、实验小结:

抽象类和接口都是抽象的,抽象类是对事物抽象,接口是对行为抽象。
接口可以支持多继承,抽象类只支持单继承,在抽象类中可以有非抽象方法,但是接口只能有抽象方法。
接口回调就是方法调用的逆方法。