使用抽象类还是接口(Java)

“要针对接口编程,不要针对实现编程。”那么,在java的世界里,这里的接口指的是什么呢?无非是以下两种实现方式:

方式1)抽象类(只能有一个超类)

方式2)接口Interface(可以继承多个Interface)

 

那么何时使用抽象类,何时使用接口呢?回答这个问题,得搞清楚二者各自的优势。说白了是为了更好的应对变化。

一个是接口本身的变化,一个是接口实现的变化。

对于Interface而言,能够很好的应对接口实现的变化,但是很难应对接口本身的变化。一旦Interface发生变化,所有的实现都需要同时变化。如果实现类很多,那将是噩梦,甚至是不可行。

对于抽象类而言,接口本身的变化可以轻松应对。只要在抽象类中提供默认实现就可以轻松增加行为。

但是,我们也要看到,抽象类的实现存在短处。就是实现类必须对抽象类忠心不二。如果需要以另一种视角来看待同一个实现类,就只能使用Interface了。换句话说,Interface带来了多角度的好处。

 

Interface和抽象类并不是互斥的。你可以提供一个接口说“你可以使用这些功能”,在提供一个超类说“这是一种实现方式”。此时使用者应该应用接口类型,这样未来的维护者就可以根据需要随时替换新的实现。

转载于:https://www.cnblogs.com/howdoyoudo/p/3326184.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.word的理解

我们在汇编文件中经常会见到.word指令,如下所示: label:.word express label,是一个标签,它是一个链接地址的别名,相当于一个指针。 express,表示链接地址处的内容,相当于指针所指向的内容。…

foreman架构的引入2-安装前环境准备

零基础学习Puppet自动化配置管理系列文档Foreman官网提供了每个版本非常完善的安装步骤,无论是源码安装还是rpm包安装都变得非常方便。而且Foreman通过puppet模块对安装步骤进行了封装并提供了大量的安装参数可以传输,相当的方便。不过由于其体系过大&am…

软件集成策略故事连载----对项目的不利影响竟然这么大

2.对项目的不利影响竟然这么大 项目经理老刘跟晓川说,等这一轮集成做完,一起聊一聊。晓川听了有点紧张。不过想一想,自己已经很努力了,也没有什么可担心的。其实关键是程序员提交的质量。倒正好可以借这个机会跟领导沟…

uboot源码——汇编阶段的start.S文件

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、总结 1、关于阶段的定义 第一阶段,即在内部SRAM运行的阶段,简单地理解为汇编阶段。此阶段主要涉及start.S文件,在cpu/s5pc11x/目录下。第一阶段以ldr pc _sta…

TCP三次握手及四次挥手详细图解(转)

1.链接:http://www.cnblogs.com/hnrainll/archive/2011/10/14/2212415.html Andrew Huangbluedrum163.com 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助.而且对…

rm命令:linux如何反向删除文件

假如某目录下有多个文件:file1,file2……filen。 保留单个文件file1,其他文件删除的方法: # shopt -s extglob # rm -fr !(file1) 保留多个文件如file1和file2,其他文件删除的方法: # shopt -s extglob…

何以解养老之忧

何以解养老之忧 何以解养老之忧 很久没有写读后感了,记得那还是上高中以前做的事情。今天,2013年9月的某日。我读了一篇社论,题目为《如何让民众信任“以房养老”》的文章。 从文章当中得知,2012年底我国60周岁以上老年人口已达1.…

机器学习算法之旅

在理解了我们需要解决的机器学习问题之后,我们可以思考一下我们需要收集什么数据以及我们可以用什么算法。本文我们会过一遍最流行的机器学习算法,大致了解哪些方法可用,很有帮助。 机器学习领域有很多算法,然后每种算法又有很多延…

Android Handler的使用方法

如何让程序5秒钟更新一下Title.首先我们看一下习惯了Java编程的人,在不知道Handler的用法之前是怎么样写的程序,代码如下所示: package com.example.androidhandletest; import java.util.Timer;import java.util.TimerTask; import android.os.Bundle;import andro…

转:[C/C++]2014年7月华为校招机试真题(一)

[C/C]2014年7月华为校招机试真题(一)转载于:https://www.cnblogs.com/kira2will/p/4039521.html

df命令:显示系统上可使用的磁盘空间

以下内容源于网络资源的学习与整理,如有侵权请告知删除。 简介 df命令的英文全称即“Disk Free”,用于显示系统上可使用的磁盘空间。 日常普遍用该命令可以查看硬盘的挂载点,磁盘被占用了多少空间、还剩多少空间等信息。 默认单位为KB&#…

核心动画--基本动画

#pragma mark 动画暂停- (void)pauseAnimation{// 1. 取出当前的动画的时间点,就是要暂停的时间点CFTimeInterval pauseTime [self.myView.layer convertTime:CACurrentMediaTime() fromLayer:nil];// 2. 设置动画的时间偏移量,指定时间偏移量的目的是让…

du命令:显示文件或者目录的大小

以下内容源于网路资源的学习与整理,如有侵权请告知删除。 由于磁盘空间将满,需要整理磁盘时,想知道哪些文件夹的内容过大,以及删除一些无用文件,du命令会非常有用。在用户目录下输入“du --max-depth1 -h”查看哪些文…

windows 下查看进程占用

2019独角兽企业重金招聘Python工程师标准>>> //查找出占用8086端口进程的ID netstat -nao | findstr8086 //本机输出效果为: TCP 0.0.0.0:8086 0.0.0.0:0 LISTENING 804 //很显然,进程ID是804 //找出ID为804的进程名 …

【知乎摘要】女生婚前应该清楚男友哪些方面了才能嫁给他

纽约时报15问 1. 我们要不要孩子?如果要,主要由谁来负责? 2. 我们的家庭赚钱能力及目标是什么?消费观及储蓄观会不会发生冲突? 3. 我们的家庭如何维持?由谁来掌握可能出现的风险? 4. 我们有没有详尽地交换…

利用tftp将内核镜像下载到开发板

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、前言 除了利用fastboot将内核镜像从PC主机下载到开发板的inand中,还可以利用tftp指令将虚拟机linux系统中的镜像下载到开发板的内存中。比如将bootcm设置如下: set boot…

MySQL数据库增删改查

常用的数据类型: int:整数类型,无符号的范围【0,2^32-1】,有符号【-2^31,2^31-1】 float:单精度浮点,4字节64位 double:双精度浮点,8字节64位 char:固定长…

C#多线程案例基础

C#多线程案例基础(转) 在学习多线程之前,我们先来看几个概念: 1,什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源,当然一个程序也可能…

什么是shell?

本文源于网络资源的学习与整理,如有侵权请告知删除。 shell的概念 shell,它的意思是“壳”,如果理解shell在linux中的作用(内核的外壳,既保护了内核,也向用户提供了操作内核的接口)&#xff0c…

chmod的理解

ll file 共有是十位第一位:如果是 - 表示它是文件第一位:如果是d 表示它是目录剩下的333 分别表示 属主u属组g其他用户o所以如下:转载于:https://blog.51cto.com/zlong37/1567472