[转]深入理解Java的接口和抽象类

  对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。下面是本文的目录大纲:  一.抽象类  二.接口  三.抽象类和接口的区别  若有不正之处,请多多谅解并欢迎批评指正,不甚感激。  请尊重作者劳动成果,转载请标明原文链接:  http://www.cnblogs.com/dolphin0520/p/3811437.html  在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:?1abstractvoidfun();  抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。  下面要注意一个问题:在《JAVA编程思想》一书中,将抽象类定义为“包含抽象方法的类”,但是...

RestFul接口设计

1.接口编程    1.1背景      随着互联网的发展,尤其是移动互联为代表的Web3.0时代.客户端层出不穷,以APP、微信、PC浏览器为代表,服务端业务逻辑是基本一致的。那么有没有一种方式可以做到”服务端一次编写,客户端随时接入”呢?    1.2接口编程    API(ApplicationProgrammingInterface,应用程序编程接口),程序之间交互数据的一种方式。     请求方式:get方式post方式     请求协议:http协议https协议     返回参数格式:普通字符串、json格式、xml格式,现在通用的是json格式2.RESTFul设计风格    2.1Rest;与RestFu...
代码星球 代码星球·2021-02-15

浏览器调用接口发现Provisional headers are shown

一次请求时候报错无论如何也找不到错误,后台接口和前端请求都是正确的。后来发现是自己浏览器上装了广告拦截的插件把我这个请求给拦截果断关闭或卸载插件立马就好了。 ...

spring boot 接口返回值去掉为null的字段

现在项目都是前后端分离的,返回的数据都是使用json,但有些接口的返回值存在null或者"",这种字段不仅影响理解,还浪费带宽,需要统一做一下处理,不返回空字段,或者把NULL转成“”,spring内置的json处理框架是Jackson,对它配置后可以去除JacksonObjectMapper通过自定义配置该组件可以选择性序列化返回的JSON通过官网可以知道:https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#howto-customize-the-jackson-objectmapper SpringMVC(客户端和服务器端)用于HttpMessageConverters在HTTP交换中协商内容转换。如果Jackson在类路径上,您已经获得了提供的默认转换器Jackson2ObjectMapperBuilder,其中一个实例是为您自动配置的。SpringBoot还具有一些功能,可以更轻松地自定义此行为。新建配置类:(去掉null或""字段)packagecom.zpark.t...

C# HTTP请求对外接口、第三方接口公用类

 ///<summary>///网络数据请求公共函数///</summary>publicclassHttpWebRequestCommon{#region根据HTTP协议请求接口,不携带参数///<summary>///根据HTTP协议请求接口,不携带参数///</summary>///<paramname="url">请求的第三方接口地址</param>///<returns>接口返回的数据</returns>publicstaticstringHttpRequest(stringurl){//stringreturnData=null;stringret=string.Empty;try{HttpWebRequestwebReq=(HttpWebRequest)WebRequest.Create(url);webReq.Method="POST";webReq.ContentType="application/json";StreampostData=webReq.GetRe...

编程经验点滴----使用接口表保存可能并发的业务,然后顺序处理

  这篇文章的主要内容,来自与其他人的讨论。  软件系统的开发或设计时,容易遇到有并发的情况。有时候需要刻意去避免,防止数据错误。比如超市卖商品,可能两个柜台同时卖出一款矿泉水,如果软件系统后台需要跟踪每个商品的库存,此时就需要特别考虑。如果两个柜台,同时采取"读当前库存,减一,得到最新库存,保存"的设计,则可能会导致数据错误。比如,两个柜台,读当前库存,都得到100,减一,都得到99,作为最新数据保存,保存99。最后,尽管同时卖出了两瓶矿泉水,最后系统的库存确是99。无疑是有问题的。  一个简单的解决办法,就是再设计一个接口表。对于有可能并发的操作,统一插入一条"待处理的操作指令"到此接口表中,然后单独起一个线程,逐个处理此接口表中待处理数据。  大致步骤如下:1.并发处理,统一插入一条待处理的操作指令到此接口表中,只insert:insertintoti_xxx....;--process_flag=02.单独起一个线程,逐个读:ti_xxx中未处理的数据.2.1selecttop1fromti_xxxwhereprocess_flag=0orderbyincrease_key,c...

C# WebApi过滤器(开发接口必备利器)

在WEBApi中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理。引入了这一机制可以更好地践行DRY(Don’tRepeatYourself)思想,通过Filter能统一地对一些通用逻辑进行处理,如:权限校验、参数加解密、参数校验等方面我们都可以利用这一特性进行统一处理,今天我们来介绍Filter的开发、使用以及讨论他们的执行顺序。一、Filter的开发和调用        在默认的WebApi中,框架提供了三种Filter,他们的功能和运行条件如下表所示:Filter 类型实现的接口描述AuthorizationIAuthorizationFilter最先运行的Filter,被用作请求权限校验ActionIActionFilter在Action运行的前、后运行ExceptionIExceptionFilter当异常发生的时候运行      首先,我们实现一个AuthFilterOutsid...

接口与抽象类的应用(包括各自设计模式)

1)掌握抽象类和接口的实例化操作。2)掌握模板设计的作用。3)掌握工厂设计模式的作用。4)掌握代理设计模式的作用。5)掌握适配器模式的作用。6)掌握抽象类与接口的使用区别。2.1为抽象类和接口实例化  在java中,可以通过对象的多态性,为抽象类和接口实例化,这样再使用抽象类和接口的时候就可以调用本子类中所覆写过的方法。  之所以抽象类和接口不能直接实例化,是因为其内部包含了抽象方法,抽象方法本身是未实现的方法,所以无法调用。  通过对象多态性可以发现,子类发生了向上转型关系之后,所调用的全部方法,都是被覆写过的方法。如下:abstractclassA{//定义抽象类Apublicabstractvoidprint();//定义抽象方法print()};classBextendsA{//定义子类,继承抽象类publicvoidprint(){//覆写抽象方法System.out.println("HelloWorld!!!");}};publicclassAbstractCaseDemo01{publicstaticvoidmain(Stringargs[]){Aa=newB();//...

面向对象的六大原则之 —— 接口隔离原则

学习了何红辉、关爱民写的《Android设计模式》,对于面向对象的六大原则有进一步的理解,特此根据自己的理解记录总结一下什么是接口隔离原则接口隔离的目的就是将庞大的接口拆分成更小的或者说更具体的接口,使得系统的耦合度大大降低,从而容易重构、修改等在《面向对象的六大原则之——单一原则》中我们有如下代码:[java] viewplain copy/**     * 缓存到sd卡     * @param url 图片的url     * @param bitmap bitmap对象     */     public void put(String url ,Bitmap bitmap){ &nb...

Android平台相机接口的应用

Android作为Google移动互联网战略的重要组成部分,将进一步推进“随时随地为每个人提供信息”这一企业目标的实现。Google的目标是让移动通信不依赖于设备,甚至是平台。出于这个目的,Android将完善而不是替代Google长期以来推行的移动发展战略:通过与全球各地的手机制造商和移动运营商成为合作伙伴,开发既实用又有吸引力的移动服务,并推广这些产品。Android平台的研发队伍阵容强大,包括Google、HTC(宏达电)、T-Mobile、高通、摩托罗拉、三星、LG以及中国移动在内的30多家企业都将基于该平台开发手机的新型业务,应用之间的通用性和互联性将在最大程度上得到保持。“开放手机联盟”表示,Android平台可以促使移动设备的创新,让用户体验到最优质的移动服务第二部分、体系结构:1、Androidcamera架构AndroidCamera框架从整体上看一个client/service的架构,有两个进程:一个是client进程,可以看成是AP端,主要包括java代码与一些nativec/c++代码;另一个是Service进程,属于服务端,是nativec/c++代码,主要负...

springboot 同一请求入口,根据不同入参用不同实体类接收&调用不同接口实现类(枚举、泛型、多态综合运用)

 1.情景展示  请求入参:  这是一个对外提供的请求总入口,入参interfaceMethod对应不同的接口名称,具体的接口请求参数封装到xcParams里面。  对外只提供这一个接口,而不是不同接口提供不同地址,这样一来,无论是接口提供方还是接口调用方只要遵循这种规范,就可以完成不同接口的调用,也利于后期接口的启用、禁用、扩展新接口,提高系统的可维护性。  像这样,用实体类接收到请求入参,获取将要调取的接口方法,根据不同接口名称匹配调用不同的业务实现类进行业务处理。2.现状分析  在实际开发过程中,公司与公司之间或者公司内部项目与项目之间往往会存在这种需求,公司A提供接口,公司B调用接口,如果是多个接口,那么就可以像上面那样搞一个总入口:  使用switch判断具体需要调用哪一个接口,以及负责处理的业务实现类就可以了。  以上的代码是完全没有问题的,已经满足了实际业务需要,这种入门级的代码,基本不要动什么脑子;  但是,如果我们想要使用高逼格的代码实现这种功能,能够让我们用更多java知识应用到实际开发过程中,学以致用,使自己的能力得到升华,换句话说就是:想装X,请欣赏下...

java 调用腾讯身份OCR接口文档实例(绝对可用)

 1.情景展示  通过读取身份证照片上的信息,实现自动填充功能。 2.原因分析  想要解析照片上所携带的相关信息,就需要识别照片的功能,腾讯提供了免费的身份证OCR接口,可供大家使用。  没有耐心的可以直接看接口调用(跳过接口规则介绍)3.接口规则  接口地址:https://api.ai.qq.com/fcgi-bin/ocr/ocr_idcardocr  API地址:https://ai.qq.com/doc/ocridcardocr.shtml  规则  注意:  1.调取接口的请求方式必须使用form表单提交,JSON请求调取接口无效(我已经试过);  2.返回的是JSON格式的字符串,解析具体数据时,并不能直接当做json对象取值,需要先将其转换成JSON对象。  入参介绍  app_id,注册账号后自动生成的唯一标识,配合密钥,才能拥有调取接口的权限;  time_stamp,时间戳,获取系统当前时间戳(单位是秒,不是毫秒),用于超时校验的(5分钟);  nonce_str,随机字符串,最大长度为32位,我们直接生成32位即可。  sign,用于安全校验...

泛型、Set接口、内部比较器和外部比较器。

1.泛型,泛型是jdk1.5中引入的新特性,本质是参数化类型。所以接口中的方法的参数(形参、返回值)不确定时,可以考虑使用泛型接口。 命名规则:1publicinterfaceFan<E>{23publicvoidshowinfo(Et);45}1publicclassTest1implementsFan<String>{2      //实现类能确定泛型接口的类型3@Override4publicvoidshowinfo(Stringt){56}78} 1.2泛型的上限和下限 1)泛型的上限ArrayList(?extends类1)list声明了一个容器,容器中的元素类型一定要继承于类1,我们称这种形式叫做泛型的上限。1publicclassPhone{2privateStringmodel;3privateStringname;4privateintsignal;5publicStringgetName;678publicStringgetModel(){9returnmodel;10}1112publicvoidsetMode...

面对对象(接口

 一. 接口(interface),是一种引用数据类型。   interface差不多==abstractclass  1)接口是hasa(继承是isa):“像”我中的一种,是继承体系之外的,用于功能扩展!想扩展就实现,不想就不用实现。  2)接口中只能声明抽象方法和常量且声明格式都是固定的,定义的所有变量都是staticfinal类型的,只不过可以省略。注意:接口中声明常量和抽象方法的格式是固定的1publicinterfaceTest{2/*publicabstractfinal*/intSPEED=100;//声明常量3/*publicabstract省略了,写也对*/voidshowInfo();//声明抽象方法4}   3)接口中的方法都是公共抽象方法1publicinterfaceMyInterface{2publicabstractvoidshowInfo();3voidshowInfo3();45//推荐写法6publicvoidshowInfo2();7} 二.接口的多态现象  1)接口不能有构造器,因为不能实例化何以...
代码星球 代码星球·2021-02-14

Django使用TestCase测试接口

在接触开源社区Github之后,发现特别多的开源项目都会有单元测试TestCase。但是在步入工作后,从业了两个创业公司,发现大多数程序员都没有养成写单元测试的习惯。在目前的公司面试了一些程序员,他们的工作经验平均都有三年以上,但是都没有编写单元测试的习惯。问到"为什么不去编写单元测试呢?",无非就是回答"没有时间"、"写的都是接口,直接用客户端工具测试一下就可以了"。在笔者使用了Django框架自带的TestCase之后,发现用TestCase测试接口不仅比一些客户端工具方便,而且还能降低在对代码进行修改之后出现BUG的几率,特别是一些对代码有严重的洁癖喜欢优化代码的程序员来说真的非常有用。而且运用框架的TestCase编写单元测试,还能结合一些CI工具来实现自动化测试,这个我也会专门写一篇文章来介绍我利用GitlabCI结合Django的TestCase实现自动化测试的一些心得。为了方便没用用过TestCase的读者,先简单介绍一下TestCase的类结构。常见的TestCase由setUp函数、tearDown函数和test_func组成。这里test_func是指你编写了测试逻...
首页上一页...45678...下一页尾页