zoukankan      html  css  js  c++  java
  • 接口

    接口和内部类为我们提供将接口和实现分离的更加结构化的方法

    抽象类和抽象方法

    abstract:由于只是提供公共接口的基类生成对象会导致程序出现bug,因此为了避免这种情况,使用抽象类(包含抽象方法)的话,一旦试图获得抽象类对象,编译器会报错.

    而且抽象类也是很有用的重构工具,可以很容易将公共方法沿着继承层次结构向上移动

    接口

    interface:比抽象类更进一步,产生完全抽象的类,不提供任何具体实现.只是允许创建者确定方法名,参数列表和返回类型,只提供形式.

    接口就是类与类之间的协议.

    接口中的方法时隐式public 因为子类需要提供实现,需要能访问到接口中的方法.

    接口中的域隐式为static和final的

    完全解耦

    如果方法操作的时类而非接口就只能使用该类以及子类.所以使用接口可以去掉这种限制,使我们可以编写可复用性更好的代码

    多重继承

    因为接口根本没有具体实现,所以没有任何和接口相关的存储,因此无法阻止多个接口的组合.所以可以多重继承接口,子类可以向上转型成为任何一个接口

    通过继承来扩展接口

    通过继承可以轻易的扩展现有的接口甚至组合多个接口形成新接口.

    组合接口时的名字冲突

    如果组合多个接口时两个接口中存在同名方法时不会有事,因为两者时相同的,但是如果签名或是返回类型不同,则会出现问题,覆盖,实现,重载搅在一起会出现错误.

    打算组合不同接口时尽量避免相同的方法名,不然会造成代码可读性的混乱

    适配接口

    接口的最大特点就是允许同一个接口拥有多个不同的具体实现,因此如果方法参数为接口类型,则使方法更加灵活和具有可复用性.可以使用任何对象来调用该方法,只要遵循这个接口,这符合策略设计模式

    而且因为接口提供的伪多重继承机,导致我们可以在任何现有类之上添加新的接口,意味着方法接受接口类型,则可以让任何类都可以为该方法适配.这也用到了适配器模式.

    接口中的域

    因为接口中的域使默认static和final的.所以接口就成为了一种便捷的创建常量组的工具,在se5之前,这使产生枚举类型相同效果类型的唯一途径

    初始化接口中的域

    接口中的域不能是空final,但是可以被非常量表达式初始化.

    嵌套接口

    接口可以嵌套在类或者其他接口中

    在类中嵌套接口可以是public或者包访问权限,而且身为新的方式,还可以是private型的接口,他可以在子类中被实现为public或者private都可以,他的最大作用是强制该接口中的方法定义不要添加类型信息,不允许向上转型.

    嵌套在另一个接口中的接口必定是public.

    实现接口时并不需要实现嵌套在接口内的接口.

    接口和工厂

    接口是实现多重继承的方式,而生成遵循接口的对象的典型方式是工厂设计模式,我们会在工厂对象上调用创建方法,使得我们的代码将完全与接口的实现分离,可以透明得将某个实现替换为另一个实现.

    但是还有更优美的工厂实现方式:匿名内部类

    总结

    但是任何抽象性都应该是由真正的需求产生,而不应该滥用接口,平时应尽可能选择类,只有接口的必需性变得非常明确才进行重构,接口是非常容易被滥用的工具.





  • 相关阅读:
    TCP 窗口缩放、时间戳和 SACK
    对微前端的11个错误认识
    终于解决了使用Python装饰器的一个痛点
    go使用mongo
    获取鼠标当前元素
    console控制台屏蔽console
    httpx使用HTTP/2
    go解析未知结构的json
    python字典转对象
    .::Best Musica Paradisa::.
  • 原文地址:https://www.cnblogs.com/renluxiang/p/89d19f6bc28e174c12e6cd540b6267f9.html
Copyright © 2011-2022 走看看