Java:详解 抽象类(abstract class) & 接口(Interface)的区别(文不如图,图不如表)

前言
·在Java中,实现 抽象的机制有2种:抽象类(abstract class)和接口(Interface)
·二者非常类似,甚至可相互替换,因此很多开发者开发时对于二者的选择十分随意。其实,2者之间存在很大区别
·本文将对抽象类(abstract class)、接口(Interface) & 之间的区别 进行详细 讲解剖析

目录

《Java:详解 抽象类(abstract class) & 接口(Interface)的区别(文不如图,图不如表)》 944365-a1e1e9d25cc5ab64.png

1. 知识储备:抽象是什么?

《Java:详解 抽象类(abstract class) & 接口(Interface)的区别(文不如图,图不如表)》 944365-ab1217fe0d3ec3cb.png

下面,将主要讲解Java中抽象的2种实现方式:抽象类(abstract class)和接口(Interface)

2. 抽象类(abstract class)

《Java:详解 抽象类(abstract class) & 接口(Interface)的区别(文不如图,图不如表)》 944365-ab1217fe0d3ec3cb.png

示例:

// 定义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();  
    }  
}  

// 运行结果
猫叫:喵喵...  
狗叫:汪汪... 

3. 接口(Interface)
介绍如下:

《Java:详解 抽象类(abstract class) & 接口(Interface)的区别(文不如图,图不如表)》 944365-ab1217fe0d3ec3cb.png

示例:

interface Demo{
    void method1();
    void method2();
}
  
class Test implements Demo{  
    void method1();
    void method2();
} 

4. 二者的区别

《Java:详解 抽象类(abstract class) & 接口(Interface)的区别(文不如图,图不如表)》 1.png

5. 实例讲解

下面给出1个简单的例子,让大家更好地去理解二者的区别 & 应用场景

5.1 需求描述
需求1:有1类门,其本质功能 = 开门 & 关门
需求2:为上述这类门增加1个报警器,可进行报警
5.2 需求实现
该需求的实现方案有3种,均可完成需求:

1=只使用抽象类、2=只使用接口、3=同时使用抽象类 & 接口

具体请看如下:

// 方案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(){}  
  } 

虽然3种实现方式均可完成需求,可是,明显使用方案3 更加符合 抽象类 & 接口的使用

    原文作者:_陈祥
    原文地址: https://www.jianshu.com/p/b7cc62c1fcef
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞