接口和抽象类的对比以及接口案例

接口和抽象类的对比

 

比较点 抽象类 接口
定义 用abstract关键字来修饰类 interface关键字来修饰
组成 抽象方法,普通方法,构造方法,成员变量,常量 抽象方法,静态常量
使用 子类继承(extends) 实现类实现(implements)
关系 抽象类可以实现接口 接口是不能继承抽象类的
对象 都是通过对象的多态类实现的 都是通过对象的多态类实现的
局限 不能多继承,不能实例化 可以多继承,不能实例化
选择 建议选择接口,避免单继承 建议选择接口,避免单继承
实际 模板 标准

 

 

 

 

 

 

 

 

 

 

 

 

 

接口案例

要求如下:

(1)所有的可以拨号的设备都应该有拨号功能(Dailup)

(2)所有的播放设备都可以有播放功能(Play).

(3)所有的照相设备都有拍照功能(takePhoto)。

(4)定义一个电话类Telephone,有拨号功能。

(5)定义一个Dvd类有播放功能。

(6)定义一个照相机类Camera,有照相功能。

(7)定义一个手机类Mobile,有拨号,拍照,播放功能。

(8)定义一个人类Person,有如下方法:

  <1>使用拨号设备use(拨号设备)

  <2>使用拍照设备use(拍照设备)

  <3>使用摇放设备use(播放设备)

  <4>使用拨号播放拍照设备use(拔号摇放拍照设备)

(9)编写测试类Test分别创建人,电话,Dvd,照相机,手机对象,让人使用这些对象

 

首先先定义拨号、播放、拍照功能的接口

public interface IDailup {

    /**
     * 拨号
     */
    void dailup();
}
public interface IPlay {
    /**
     * 播放
     */
    void play();
}
public interface ITakePhoto {
    /**
     * 照相
     */
    void takephoto();
}

定义照相类、DVD类、照相机类去实现接口

复制代码
/**
 * 电话类
 */
public class Telephone implements IDailup{
    @Override
    public void dailup() {
        System.out.println("电话拨号功能");
    }
}
复制代码
复制代码
/**
 * DVD类
 */
public class Dvd implements IPlay{
    @Override
    public void play() {
        System.out.println("DVD播放功能");
    }
}
复制代码
复制代码
/**
 * 照相机类
 */
public class Camera implements ITakePhoto{
    @Override
    public void takephoto() {
        System.out.println("照相机拍照");
    }
}
复制代码

定义一个接口去继承拨号、播放和照相功能

public interface IMobile extends IDailup,IPlay,ITakePhoto{
    
}

定义手机类去实现接口

复制代码
/**
 * 手机类
 */
public class Mobile implements IMobile{
    @Override
    public void dailup() {
        System.out.println("手机拨号");
    }

    @Override
    public void play() {
        System.out.println("手机播放");
    }

    @Override
    public void takephoto() {
        System.out.println("手机照相");
    }
}
复制代码

定义Person接口在实现接口

复制代码
public interface IPerson {
    /**
     * 使用拨号设备
     */
    void use(IDailup dailup);
    /**
     * 使用播放设备
     */
    void use(IPlay play);
    /**
     * 使用拍照设
     */
    void use(ITakePhoto takePhoto);
    /**
     * 全部功能
     */
    void use(IMobile mobile);
}
复制代码
复制代码
public class Person implements IPerson{
    @Override
    public void use(IDailup dailup) {
        dailup.dailup();
    }

    @Override
    public void use(IPlay play) {
        play.play();
    }

    @Override
    public void use(ITakePhoto takePhoto) {
        takePhoto.takephoto();
    }

    @Override
    public void use(IMobile mobile) {
        mobile.dailup();
        mobile.play();
        mobile.takephoto();
    }
}
复制代码

编写测试类创建对象

复制代码
public class Test {
    public static void main(String[] args) {
        Person person = new Person();
        //电话
        IDailup telephone = new Telephone();
        //DVD
        IPlay play = new Dvd();
        //照相机
        ITakePhoto takePhoto = new Camera();
        //手机
        IMobile mobile = new Mobile();
        person.use(telephone);
        person.use(play);
        person.use(takePhoto);
        System.out.println("-----");
        person.use(mobile);
    }
}
复制代码

运行结果:

 

posted @   xjw12345  阅读(65)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示