Java:详解 抽象类(abstract class) &

作者: hahaoop | 来源:发表于2019-02-08 20:16 被阅读17次

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

    目录

    944365-a1e1e9d25cc5ab64.png
    1. 知识储备:抽象是什么?
    944365-ab1217fe0d3ec3cb.png
    下面,将主要讲解Java中抽象的2种实现方式:抽象类(abstract class)和接口(Interface)

    2. 抽象类(abstract class)

    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)
    介绍如下:

    944365-ab1217fe0d3ec3cb.png
    示例:
    interface Demo{
        void method1();
        void method2();
    }
      
    class Test implements Demo{  
        void method1();
        void method2();
    } 
    

    4. 二者的区别

    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 更加符合 抽象类 & 接口的使用

    相关文章

      网友评论

        本文标题:Java:详解 抽象类(abstract class) &

        本文链接:https://www.haomeiwen.com/subject/eduosqtx.html