接口和抽象类对比 与 案例

接口和抽象类对比 

比较点 抽象类 接口
定义 用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);

    }
}

 

 

 

 

 

posted @ 2022-06-19 13:54  魔光领域  阅读(29)  评论(0编辑  收藏  举报