当前位置: 首页 > news >正文

abstract 和Interface的共同点和区别以及应用场景

abstract:

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

interface:

描述对象有哪些属性。

 

共同点

A.两者都是抽象类,都不能实例化

B.Interface实现类和abstract继承类都必须实现抽象方法

不同点

A.Interface需要实现,用implements;Abstract 需要继承,用exends

B.一个类可以实现多个Interface ;一个类只能继承一个Abstract

C.Interface强调功能的实现;Abstract强调从属关系

D.Interface的所有抽象类都只有声明没有方法体;Abstract抽象方法可以选择实现,也可以选择继续声明为抽象方法,无需实现,留给子类去实现

 

 

Abstract class

Interface

实例化

不能

不能

一种继承关系,一个类只能使用一次继承关系。可以通过继承多个接口实现多重继承

一个类可以实现多个interface

数据成员

可有自己的

静态的不能被修改即必须是static final,一般不在此定义

方法

可以私有的,非abstract方法,必须实现

不可有私有的,默认是public,abstract 类型

变量

可有私有的,默认是friendly 型,其值可以在子类中重新定义,也可以重新赋值

不可有私有的,默认是public static final 型,且必须给其初值,实现类中不能重新定义,不能改变其值。

设计理念

表示的是“is-a”关系

表示的是“like-a”关系

实现

需要继承,要用extends

要用implements

 

应用场景:

interface的应用场景:

  A. 类与类之前需要特定的接口进行协调,而不在乎其如何实现。

  B. 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。

  C. 需要将一组类视为单一的类,而调用者只通过接口来与这组类发生联系。

  D. 需要实现特定的多项功能,而这些功能之间可能完全没有任何联系。

abstract class的应用场景:

  A. 定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用abstract class定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖。

  B. 某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还必需类中表示状态的变量来区别不同的关系。abstract的中介作用可以很好地满足这一点。

  C. 规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己特定的状态来实现特定的功能。

 

相关文章:

  • 算法面试题:最长回文子串
  • SpringMVC AJAX向后台传递数组参数/实体集合
  • 算法面试题:无重复字符的最长子串
  • 盒子模型高级应用
  • WRONGTYPE Operation against a key holding the wrong kind of value
  • TunnelBroker for EdgeRouter 后记
  • redis.properties 最详细参数解析
  • [BZOJ]4817: [Sdoi2017]树点涂色
  • redis和memcahed的共同点,区别以及应用场景
  • mysql 去除密码登录
  • express中的路径区别
  • 团队作业2——需求分析原型设计
  • redis五种数据类型的实现方式,常用命令,应用场景
  • MVC前后台传值
  • idea 右键没有run和debug选项
  • [译] React v16.8: 含有Hooks的版本
  • 2017 年终总结 —— 在路上
  • 2019.2.20 c++ 知识梳理
  • canvas 高仿 Apple Watch 表盘
  • fetch 从初识到应用
  • java8 Stream Pipelines 浅析
  • Java的Interrupt与线程中断
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • linux学习笔记
  • PHP 的 SAPI 是个什么东西
  • python 装饰器(一)
  • python大佬养成计划----difflib模块
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • win10下安装mysql5.7
  • windows下如何用phpstorm同步测试服务器
  • 不上全站https的网站你们就等着被恶心死吧
  • 高度不固定时垂直居中
  • 计算机常识 - 收藏集 - 掘金
  • 理清楚Vue的结构
  • 前端之Sass/Scss实战笔记
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 学习Vue.js的五个小例子
  • 用jQuery怎么做到前后端分离
  • 如何在招聘中考核.NET架构师
  • ​520就是要宠粉,你的心头书我买单
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (一)Linux+Windows下安装ffmpeg
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .cn根服务器被攻击之后
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET MVC第三章、三种传值方式
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • /3GB和/USERVA开关
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [Android实例] 保持屏幕长亮的两种方法 [转]