接口和抽象类对比 与 案例
作者:互联网
接口和抽象类对比
比较点 | 抽象类 | 接口 |
定义 | 用abstract关键字来修饰的类 | interface关键字修饰的类 |
组成 | 抽象方法,普通方法,构造方法,成员变量,常量 | 抽象方法,静态常量,JDK1.8注意 |
使用 | 子类继承(extends) | 实现类实现(implements) |
关系 | 抽象类可以实现接口 | 接口不能继承抽象类 |
对象 | 通过对象的多态类实现 | 通过对象的多态类实现 |
局限 | 不能多继承,不能实例化 | 可以多继承,不能实例化 |
选择 | 建议选择接口,避免单继承 | 建议选择接口,避免单继承 |
实际 | 模板 | 标准 |
案例
要求如下:
(1)所有的可以拨号的设备都应该有拨号功能(Dailup)
(2)所有的播放设备都可以有播放功能(Play)。
(3)所有的照相设备都有拍照功能(takePhatg)。
(4)定义一个电话类Telephone,有拨号功能。
(5)定义一个Dwd类有播放功能。
(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 ITakePhone { void takePhone(); }
/** * 拨号 */ public class TakePhone implements IDailup{ @Override public void dailup() { System.out.println("电话拨号中..."); } }
/** * 播放功能 */ public class Dvd implements IPlay{ @Override public void play() { System.out.println("DVD播放中...."); } }
/** * 拍照 */ public class Camera implements ITakePhone{ @Override public void takePhone() { System.out.println("照相机拍照"); } }
/* 接口手机类 */ public interface IMobile extends IDailup,IPlay,ITakePhone{ }
public class Mobile implements IMobile{ @Override public void dailup() { System.out.println("手机拨号"); } @Override public void play() { System.out.println("手机播放"); } @Override public void takePhone() { System.out.println("手机照相"); } }
public class Person implements IPerson{ @Override public void user(IDailup dailup) { dailup.dailup(); } @Override public void user(IPlay play) { play.play(); } @Override public void user(ITakePhone takePhone) { takePhone.takePhone(); } @Override public void user(IMobile mobile) { mobile.dailup(); mobile.play(); mobile.takePhone(); } }
测试:
public class Test { public static void main(String[] args) { IPerson person = new Person(); //电话 IDailup telephone = new TakePhone(); //Dvd IPlay play = new Dvd(); //照相机 ITakePhone takePhone = new Camera(); //手机对象 IMobile mobile = new Mobile(); person.user(telephone); person.user(play); person.user(takePhone); System.out.println("-----------"); person.user(mobile); } }
搜索
复制
标签:play,void,拨号,接口,案例,takePhone,Override,抽象类,public 来源: https://www.cnblogs.com/pengtianyang/p/16390416.html