java 接口和抽象类的区别6_JAVA基础篇-接口和抽象类的区别

.前言

JAVA是一种面向对象语言,具备抽象(Abstract),封装(packing),继承(extends),多态(polymorphic)四大特性。

我们重点从oop思想∠来分析。

.在面向对象的四大特性的作用体现

抽象:父类为子类提供一些属性和行为,子类根据业务需求实现具体的行为(这时抽象类派上了用场,如工厂设计模式中的抽象工厂[AbstractFactoryClass])。

封装:把对象的属性和行为(方法)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节;java中的对属性赋值(set)与取值(get)的隐藏与开放能体现这一点。

继承:子类可以继承父类的所有非私有(private)特性,并可以重写父类的除构造函数之外的行为非私有与final方法,重写是用@overide标记注解实现,继承体现出来的一般与特殊的关系即是抽象类与子类的关系。(比如交通工具与汽车的关系就是一般与特殊的关系,定义一个run()方法代表能跑,至于以何种方式跑得看具体的子类怎么去实现这个run()方法了。)

多态:接口和抽象类共同奠基了多态的基调,抽象类本身更是一个类,可以有构造函数,可以有main函数,可以定义一个没有实现的抽象方法,子类继承抽象类的时候必须要实现抽象类的父类抽象方法,考虑到里氏替换原则时,子类可以选择性的实现父类的方法,子类也可以实现父类没有实现的接口。附加描述(一个类中的方法重载也是体现多态的一种形式,因为其返回类型以及方法名是一致的,唯一不一样的是参数个数和参数类型不一样)

.补充

1.抽象类可以实现多个接口,抽象类本身是一个类,它可以有main函数,因为其可以有构造函数。ASM编译字节码为证。当它被实例一个对象时,如果包含了抽象方法必须实现它的所有抽象方法。

// access flags 0x0

//编译出来的构造函数有init标记

()V

L0

LINENUMBER 9 L0

ALOAD 0

INVOKESPECIAL AbstractClass. ()V

RETURN

L1

LOCALVARIABLE this LAbstractClass$1; L0 L1 0

MAXSTACK = 1

MAXLOCALS = 1

2.接口可以继承接口,自JAVA8开始,接口可以有默认的实现方法,用default关键字表达,不可以静态以接口名.default方法静态形式调用,实现类可以重写或直接拥有。在oop思想中,接口一般是定义同一类事物的共同行为特性,接口中不能定义变量,默认的属性都是常量的即是final的.不过一般我们在实际开发中,constant常量一般定义在枚举中,因为枚举可以构造多个参数并且可以有建立一个主键与多个描述字段的一对多映射关系。

what is purpose of default modifier?

enable new functionality to be added to the interfaces of libraries and ensure binary compatibility with code written for older versions of those interfaces.

3.在OOP面向对象编程中,由于接口和抽象类是真正用来体现设计思想的一种方式,尤其是设计模式中的讲究,设计模式才是设计的精髓,一切都遵循对象的六大原则设计特点(1.单一职责原则(Single Responsibility Principle SRP)开闭原则(Open Close Principle OCP)||里氏替换原则(Liskov Substitution Principle LSP)||依赖倒转原则(Dependence Inversion Principle DIP)|| 接口隔离原则(Interface Segregation Principle ISP)||迪米特原则 (Least Knowledge Principle LKP)),所以在具体设计时一定要根据实际的业务需求场景在接口和抽象类中做出最优的抉择,当然很多情况下是可以在一起用的。

4.接口和抽象类的相同点:

(1) 都可以被继承

(2) 都不能被实例化

(3) 都可以包含方法声明

(4) 派生类必须实现未实现的方法

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

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

相关文章

笔试常见的智力题(附答案)

*************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com *************************************************** A.逻辑推理 1、你让工人为你工作7天,给工人的回报是一根金条。金条…

Compile a native C Android application

2019独角兽企业重金招聘Python工程师标准>>> http://www.cnblogs.com/GoAhead/p/4186707.html 通过上网搜索,你可以发现很多种编译Android native应用的方法.我想说的是,不同的控制台应用, 守护程序(daemon), C/C库,等…

could not build module ‘Foundation’, could not build module ‘UIKit’……23个错误

pch文件加入 #import <Availability.h> #ifndef __IPHONE_3_0 #warning "This project uses features only available in iOS SDK 3.0 and later." #endif #ifdef __OBJC__ #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> 转载于:htt…

java中钩子函数回调函数_钩子函数 和回调函数

标签&#xff1a;http://blog.csdn.net/lipeionline/article/details/6369657 转自也可以这样&#xff0c;更容易理解&#xff1a;回调函数就好像是一个中断处理函数&#xff0c;系统在符合你设定的条件时自动调用。为此&#xff0c;你需要做三件事&#xff1a;1. 声明&…

css3 定义选择器

引言&#xff1a;CSS样式规则有两个主要部分。选择器决定将格式化应用到哪些元素。声明则定义要应用的格式化。 构造选择器选择器可以定义五个不同的标准来选择要进行格式化的元素。 元素的类型或者名称。如下所示。 h1{color:red; } 元素所在的上下文。如下所示。 h1 em{color…

J2SE核心实战开发—— 集合类框架

文档都是基于 实验楼 线上环境制作的&#xff0c;因此文档叙述和截图均与其有关。使用其他实验环境也没有太大影响&#xff0c;知识点的操作是类似的。该系列的课程是在 实验楼 实习所原创的第一个课程&#xff0c;欢迎大家多提意见。 一、实验简介 在Java基础语法中&#xff0…

猫和老鼠java下载安装_tomcat(Java服务器)

Tomcat(Java服务器工具)是一款十分优质的Java服务器软件。在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首选。对于一个初学者来说&#xff0c;可以这样认为&#xff0c;当在一台机器上配置好Apache 服务器&#xff0c;可利用它响应…

管道通信

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 什么是管道&#xff1f; 管道是单向的、先进先出的&#xff0c;它把一个进程的输出和另…

Linux 终端下 dstat 监控工具

dstat 是一个可以取代vmstat&#xff0c;iostat&#xff0c;netstat和ifstat这些命令的多功能产品。dstat克服了这些命令的局限并增加了一些另外的功能&#xff0c;增加了监控项&#xff0c;也变得更灵活了。dstat可以很方便监控系统运行状况并用于基准测试和排除故障。dstat可…

运用HTML5+CSS3和CSS滤镜做的精美的登录界面

原始出处http://chenjinfei.blog.51cto.com/2965201/774865<!DOCTYPE HTML> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetgb2312"> <meta http-equiv"description" content"运用C…

MyEclipse使用总结——MyEclipse文件查找技巧 ctrl+shift+R ctrl+H

一、查找文件 使用快捷键【ctrlshiftR】弹出弹出文件查找框&#xff0c;如下图所示&#xff1a; 二、查找包含某个字符串的文件 使用快捷键【ctrlH】在弹出对话框中选File Search选项&#xff0c;然后在第一个文本框中粘贴&#xff08;我一般用粘贴&#xff09;或自已手动录入&…

java实现控件绑定数据源_控件(三)——TreeView控件以XmlDataSource控件为数据源实现简单的绑定...

TreeView控件功能非常强大&#xff0c;今天&#xff0c;我们只是窥其一角。我们实现的例子是&#xff1a;TreeView控件与XmlDataSource控件绑定&#xff0c;然后在网页显示选中项。首先我们添加一个xml&#xff0c;取名为tv.xml。在其中写上如下代码&#xff1a;这时我们在defa…

手机屏幕原理和设计(触摸屏幕)

//本文参考了很多百度百科的知识  随着android手机的流行&#xff0c;手机触摸屏成为一个时尚。再购机的时候&#xff0c;就会有很多人去问手机的触屏是电阻式的还是电容式的呢&#xff1f;但是其实很多人应该是不知道个中的原委的。只是一个感觉电容式的一定要比电阻式的好。…

extjs5(05--主界面上加入顶部和底部区域)

这一节为主界面加一个顶部区域和底部区域。一个管理系统的界面可以粗分为顶部标题部分、中间数据展示和处理的部分、底部备注和状态部分。 在增加这二个区域之前&#xff0c;我们先在MainModel.js中加入一些数据。 1 Ext.define(app.view.main.MainModel, {2 extend: Ext.a…

java mongo 查询数组_MongoDB查询(数组、内嵌文档)

一、简介我们上一篇介绍了db.collection.find()可以实现根据条件查询和指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段&#xff0c;我们今天介绍了对数组和内嵌文档的查询操作&#xff0c;尤其是对$elemMatch 同样可以用在find方法的第二个参数来限制返回数组…

手机触摸屏的分类和原理,供大家选择手机时用

转载自&#xff1a;http://www.51testing.com/?uid-144635-action-viewspace-itemid-216296 必大家很关心的一个问题就是手机的触摸屏寿命是多少吧&#xff01;还有就是到底是电阻式触摸屏&#xff08;诺基亚的&#xff09;好还是电容式触摸屏&#xff08;iPhone等&#xff09…

Java类初始化顺序

jvm系列垃圾回收基础JVM的编译策略GC的三大基础算法GC的三大高级算法GC策略的评价指标JVM信息查看GC通用日志解读jvm的card table数据结构Java类初始化顺序Java对象结构及大小计算Java的类加载机制Java对象分配简要流程年老代过大有什么影响Survivor空间溢出实例关于Objectnull…

Actionbarsherlock Demo 浅析 :Overlay

让Actionbar处于覆盖模式&#xff0c;当Activity需要显示大量滚动的内容&#xff0c;尤其是包含图片内容的时候&#xff0c;Overlay模式非常有效。 requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);//将Actionbar设置为Overlay模式。 getSupportActionBar().setBackg…

java中 怎么获取bean_java普通类如何得到spring中的bean类

在SSH集成的前提下。某些情况我们需要在Action以外的类中来获得Spring所管理的Service对象。之前我在网上找了好几好久都没有找到合适的方法。例如&#xff1a;ApplicationContext context new ClassPathXmlApplicationContext();当时我觉得没有这个必要&#xff0c;浪费内存。…

浅析C#中构建多线程应用程序

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 引言 1.理解多线程 2. 线程异步与线程同步 3.创建多线程应用程序 3.1通过System.Threa…