专栏首页Android知识分享Java:抽象类(abstract class) & 接口(Interface)到底有什么区别

Java:抽象类(abstract class) & 接口(Interface)到底有什么区别

前言

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

目录


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

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


2. 抽象类(abstract class)

  • 简介如下
  • 示例
// 定义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)

  • 介绍如下
  • 示例
interface Demo{
    void method1();
    void method2();
}

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

4. 二者的区别


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

6. 总结

  • 本文主要对 抽象类(abstract class)、接口(Interface)进行了全面总结
  • 下面我将继续对 Android & Java中的知识进行深入讲解 ,有兴趣可以继续关注Carson_Ho的安卓开发笔记

请帮顶 / 评论点赞!因为你的鼓励是我写作的最大动力!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android:手把手教你 实现Activity 与 Fragment 相互通信(含Demo)

    Carson.Ho
  • Android 逐帧动画:关于 逐帧动画 的使用都在这里了!

    Carson.Ho
  • 首页-底部&顶部Tab导航(菜单栏)的实现:TabLayout+ViewPager+Fragment

    Android开发中使用顶部 & 底部Tab导航栏的频次非常高,主要的实现手段有以下:

    Carson.Ho
  • AnimatedPathView实现自定义图片标签

    老早用过小红书app,对于他们客户端笔记这块的设计非常喜欢,恰好去年在小红书的竞争对手公司,公司基于产品的考虑和产品的发展,也需要将app社交化,于是在社区分享...

    xiangzhihong
  • 030android初级篇之android应用的启动界面

    应用启动界面,显示产品LOGO,公司Logo或者开发者信息等,同时如果准备的工作较多,可以在显示启动界面的同时后台进行准备工作,提高用户体验。

    上善若水.夏
  • Java编程思想第五版 第六章-初始化和清理

    C 语言中很多的 bug 都是因为程序员忘记初始化导致的。尤其是很多类库的使用者不知道如何初始化类库组件,甚至当侠客们必须得初始化这些三方组件时(很多可怜的掉包...

    JavaEdge
  • 常用弹出对话窗集合

    项勇
  • Android自定义GLSurfaceView

    当我们需要把同一个场景渲染到不同的Surface上时,此时系统GLSurfaceView 就不能满足需求了,所以我们需要自己创建EGL环境来实现渲染操作。 注意...

    曾大稳
  • Java基础总结大全(3)

    8、Map集合和Collection集合的区别? 1, Map中一次存储是键值对。 Collection中一次存储是单个元素。 2, Map的存储使用...

    Java学习
  • Java基础总结大全(3)

    8、Map集合和Collection集合的区别? 1, Map中一次存储是键值对。 Collection中一次存储是单个元素。 2, Map的存储使用...

    Java学习

扫码关注云+社区

领取腾讯云代金券