Java中抽象类和接口在概念、语法和应用上的区别和关系

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

    春招开始了,盆友们都忙着准备笔试、准备面试,复习学过的知识点,当然我也不例外,在这里祝每一个"有心人"心想事成,梦圆2016,加油!

    进入正题,今天总结了一下Java中抽象类和接口在概念、语法和应用上的区别和关系,分享给大家,希望给大家帮助,如有错误或者不足之处敬请指正。

    一、概念

    Java中抽象类和接口在概念上有本质的区别,抽象类是对类也就是对根源的抽象,而接口是对动作的抽象,接口是一种特殊形式的抽象类。比如猫和狗,他们都是动物,那么动物就可以作为抽象类,“每个猫或狗都是(is a)动物”,他们都会叫,都拥有叫这个动作,那么叫就可以作为一个接口供猫和狗去实现。

    二、语法

    1、含有abstract修饰符的class 即为抽象类,含有abstract的方法的类必须定义为abstract class ,abstract class 里的方法不一定是抽象的,不能有抽象的构造方法或抽象的静态方法,因为抽象类中定义抽象方法必须放在具体子类中实现,如果子类没有实现抽象父类中的所有方法,那么子类也必须定义为抽象类。


    2、接口(interface)可以说成是抽象类的特例。接口中的所有方法都必须是抽象的,接口中的方法定义默认为public  abstract 。接口中的变量是全局常量,即public static final修饰的。

    3、接口和抽象类都不能被实例化

    4、抽象类里可以有构造方法,而接口内不能有构造方法。

    5、抽象类中可以有普通成员变量,而接口中不能有普通成员变量。

    6、抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的,不能有非抽象的普通方法。

    7、抽象类中可以包含静态方法,接口内不能包含静态方法。

    8、抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public  static类型,并且默认为public static类型。抽象类中的抽象方法的访问类型可以是public ,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

    9、一个类可以实现多个接口,但只能继承一个抽象类。

    三、应用

    接口更多的是在系统框架设计方法发挥作用,主要定义模块之间的通信,而抽象类在代码实现方面发挥作用,可以实现代码的重用。当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。抽象类的功能要远超过接口,但是定义抽象类的代价高。因为每个类只能继承一个类,在这个类中,你必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口,这可以降低设计阶段难度。

转载于:https://my.oschina.net/limiaoneu/blog/631391

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

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

相关文章

跳槽

2008年6月26日 阴天多云 辞职前第16日 土耳其不争气,害的我输了近4000分的可用分,最为倒霉的是它尽然先进球,给了我那么多的希望。还有就是直播过程中突然的长时间的无信号,输都不知道怎么输的。 今天瞌睡比较重,上班的…

辨半表半里证

半表半里证是指病邪既不在表,又非完全入里,介于表里之间的证候。本证多因外邪由表传内,尚未入于里;或里邪透表,尚未达于表,邪气留居半表半里,或邪气直犯少阳,正气渐虚,正…

王道操作系统考研笔记——2.1.3 进程控制

如果这篇博客对您有用的话,可以给我点个赞吗,这对我很重要,谢谢!❤️ 2.1.3 进程控制 知识总览 2.1.3.1 进程控制的过程 进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实…

MySQL之——GROUP BY分组取字段最大值

转载自:http://blog.csdn.net/l1028386804/article/details/54657412 假设有一个业务场景,需要查询用户登录记录信息,其中表结构如下: [sql] view plaincopyCREATE TABLE tb ( id int(11) NOT NULL AUTO_INCREMENT, uid int…

王道操作系统考研笔记——2.1.4 进程通信

如果这篇博客对您有用的话,可以给我点个赞吗,这对我很重要,谢谢!❤️ 2.1.4 进程通信 知识总览 2.1.4.1 什么是进程通信 顾名思义,进程通信就是指进程之间的信息交换。 进程是分配系统资源的单位(包括内…

paper 35 :交叉验证(CrossValidation)方法思想

交叉验证(CrossValidation)方法思想简介以下简称交叉验证(Cross Validation)为CV.CV是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set),首先用训练集对分类器进行…

strerror和perror函数详解

/*#include <string.h> char *strerror(int errnum); 它返回errnum的值所对应的错误提示信息&#xff0c;例如errnum等于12的话&#xff0c;它就会返回"Cannot allocate memory"。 测试程序&#xff1a;*/ #include <stdio.h> #include <string.h>…

【2018-01-28】HTML-布局

位置&#xff1a; position&#xff1a;fixed 固定 absolute 绝对位置 relative 相对位置 top right     bottom left 流&#xff1a; float&#xff1a;left 向左流 right 向右流 both 清掉流 z-index分层&#xff1a; 值越大越靠上转载于:https://www.cnblogs.com/zqyyx…

关于设计模式——策略模式-Strategy Pattern

文章目录1 策略模式1.1 模拟鸭子1.2 设计原则1.3 整合行为1.4 模拟鸭子代码的代码1.5 动态设定行为1.6 重新查看整体1.7 继承和组合1.8 总结1.9 优劣期间应用场景2.0 参照资料1 策略模式 在我们什么都不会的情况下&#xff0c;我们先无需知道什么是策略模式&#xff0c;我们要…

python (3):wxPython打包app,报错

1&#xff0c;打包app报错 如图&#xff1a; 使用py2app&#xff0c;mac下打包成app。异常。程序直接退出。 没有详细的错误信息&#xff0c;client程序直接崩溃了。 2。原因 代码没有几行&#xff1a; #!/usr/bin/python # -*- coding: utf-8 -*- import wxapp wx.App(False…

.NET Framework 工具

您可以使用 .NET Framework 工具轻松创建、部署和管理面向 .NET Framework 的应用程序和组件。 此节中介绍的大部分 .NET Framework 工具将自动随 Visual Studio 一起安装。 &#xff08;有关安装信息&#xff0c;请参阅 Visual Studio 下载。&#xff09; 可以从命令行运行除程…

并发无锁队列学习(概念介绍)

1、前言 队列在计算机中很重要的一种数据结构&#xff0c;尤其在操作系统中。队列典型的特征是先进先出&#xff08;FIFO&#xff09;&#xff0c;符合流水线业务流程。在进程间通信、网络通信之间常常採用队列做缓存&#xff0c;缓解数据处理压力。结合自己在工作中遇到的队列…

王道操作系统考研笔记——2.1.5 线程概念与多线程模型

文章目录2.1.5 线程概念与多线程模型2.1.5.1 线程的来源2.1.5.2 线程机制带来的变化2.1.5.3 线程的属性2.1.5.4 线程的实现方式2.1.5.5 多线程模型2.1.5.6 小结2.1.5 线程概念与多线程模型 2.1.5.1 线程的来源 在很久以前还没有引入进程之前&#xff0c;系统中的各个程序只能…

mybatis处理集合、循环、数组和in等语句的使用

2019独角兽企业重金招聘Python工程师标准>>> 在Mybatis的xml配置中使用集合&#xff0c;主要是用到了foreach动态语句。 foreach的参数&#xff1a;foreach元素的属性主要有 item&#xff0c;index&#xff0c;collection&#xff0c;open&#xff0c;separator&…

#if defined 和 #if ! defined 的用法

背景&#xff1a;MFC初学&#xff0c;头文件中有#if !defined(AFX_HELLOMFC_H__706D36F5_2F1B_40AC_8BE9_0BD6A1D7BBDE__INCLUDED_)#define AFX_HELLOMFC_H__706D36F5_2F1B_40AC_8BE9_0BD6A1D7BBDE__INCLUDED_// Info : Other content #endif // !defined(AFX_HELLOMFC_H__706D…

Jmeter 通过Groovy保存数据到CSV

def outnew File("D:/pathdt.csv").append("\n"${__threadNum},${要导出的变量},) 转载于:https://www.cnblogs.com/Curious-wang/p/8378373.html

王道操作系统考研笔记——2.1.6 处理机调度的概念和层次

文章目录2.1.6 处理机调度的概念和层次2.1.6.1 调度的基本概念2.1.6.2 高级调度2.1.6.3 中级调度2.1.6.4 进程的挂起态和七状态模型2.1.6.5 低级调度2.1.6.6 三层调度的联系、对比2.1.6.7 小结2.1.6 处理机调度的概念和层次 知识总览 2.1.6.1 调度的基本概念 实际上&#xff…

CocoaPods详解之----使用篇

作者&#xff1a;wangzz 原文地址&#xff1a;http://blog.csdn.net/wzzvictory/article/details/18737437 转载请注明出处 如果觉得文章对你有所帮助&#xff0c;请通过留言或关注微信公众帐号wangzzstrive来支持我&#xff0c;谢谢&#xff01; 一、什么是CocoaPods 1、为什…

placeholder=请输入用户名(六位数字加英文字母)

placeholder"请输入用户名&#xff08;六位数字加英文字母&#xff09;" 转载于:https://www.cnblogs.com/nc-blog/p/4122768.html

文章集锦

不甘平庸的年轻人&#xff0c;全都有同一个特质&#xff1a;http://mp.weixin.qq.com/s/cQhS1nPxbsF3tini0-qvUA转载于:https://www.cnblogs.com/tianboblog/p/8383474.html