接口和抽象类的对比以及接口案例
接口和抽象类的对比
比较点 | 抽象类 | 接口 |
定义 | 用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); } }
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix