您当前的位置: 首页 >  Java

Kevin-Dev

暂无认证

  • 2浏览

    0关注

    544博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Java -- 基础】抽象类(Abstract) & 接口(Interface)的区别

Kevin-Dev 发布时间:2017-10-20 10:14:25 ,浏览量:2

一、前言

在 Java 中,实现 抽象的机制有 2 种:抽象类(abstract class)和接口(Interface)。

抽象是什么? 在这里插入图片描述

二、抽象类(abstract class)

1. 示意图 在这里插入图片描述 2. 栗子

// 定义1抽象动物类Animal,提供抽象方法 = cry()
public abstract class Animal {  
    public abstract void cry();  
}  
 
// 猫、狗 = 动物类的子类
// 由于cry()为抽象方法,所以Cat、Dog必须要实现cry()
public class Cat extends Animal{  
  
    @Override  
    public void cry() {  
        System.out.println("猫叫:喵喵...");  
    }  
}  
  
public class Dog extends Animal{  
  
    @Override  
    public void cry() {  
        System.out.println("狗叫:汪汪...");  
    }  
  
}  

// 测试
public class Test {  
  
    public static void main(String[] args) {  
        Animal a1 = new Cat();  
        Animal a2 = new Dog();  
          
        a1.cry();  
        a2.cry();  
    }  
}  

// 运行结果
猫叫:喵喵...  
狗叫:汪汪... 
三、接口(Interface)

1. 示意图 在这里插入图片描述

2. 栗子

interface Demo{
    void method1();
    void method2();
}
  
class Test implements Demo{  
    void method1();
    void method2();
} 
四、区别

在这里插入图片描述

五、实例

1. 需求

a:有1类门,其本质功能 = 开门 & 关门 需求 b:为上述这类门增加1个报警器,可进行报警

2. 实现

// 方案1:只使用抽象类
  abstract class Door{  
      abstract void open();  
      abstract void close();  
      abstract void alarm();  
  }  

  // 具体使用时
  class AlarmDoor extends Door {  
      void open(){}  
      void close(){}  
      void alarm(){}  
  } 

// 方案2:只使用接口
  interface Door{  
      void open();  
      void close();  
      void alarm();  
  }  

  // 具体使用时
  class AlarmDoor implements  Door {  
      void open(){}  
      void close(){}  
      void alarm(){}  
  } 


// 方案3:同时使用抽象类 & 接口
  // 对于需求1 = 抽象1类事物,即 使用抽象类
  abstract class Door{  
      abstract void open();  
      abstract void close();  
  }  

  // 对于需求2 = 抽象事物中的某个行为, 即 使用 接口
  interface Alarm{  
      void alarm();  
  }  
  
  // 具体使用时
  class AlarmDoor extends Door implements Alarm{  
      void open(){}  
      void close(){}  
      void alarm(){}  
  } 
关注
打赏
1658837700
查看更多评论
立即登录/注册

微信扫码登录

0.0391s