接口学习笔记

接口: 只有抽象方法的抽象类 我们可以用接口替代  

为什么这么做?

很简单 , 理由如下 :

    1/多继承

    2/设计和实现分离

    3/更自然的使用多态

    4/更容易实现框架搭建

    5/更容易实现更换修改等操作    .....     等等优势


接口是一种约定

针对接口编程  :程序设计时追求针对接口的约定而不考虑具体的实现       spring框架的极致体现

                        关心类具有的能力,而不去关心实现细节

接口不能实例化  而接口的实现可以   

===================================================

接口中所有的属性都是public   static   final 修饰的

常量可以是基本数据类,也可以是引用数据类型

 注意 : 

            常量的命名规范全部字母大写

            接口的修饰符可能是包    访问级别的,所以public常量有可能访问不到

            推荐使用枚举保存一组先关数据的值    jdk5以上

接口成员  ----方法

1/抽象方法 

2/静态方法

3/默认方法               后两种属于java8新增的

接口可以继承接口      不能继承静态方法


========================================================

一个类可以实现多个接口   接口可以作为数据类型用来声明变量

实现接口的抽象类可以重写部分接口中的抽象方法

----------------------------------------------------------------------------

java8提出的新语法 

一  接口的静态方法

1/可以在接口中声明静态方法,实现一些处理逻辑

2/该方法不会被实现类和子接口继承

这样我们在使用接口时可以直接打点调用接口里的静态方法 ,而也只可以以这种方式进行调用其方法

二   接口的默认方法

默认方法对所有实现改接口的类都提供了默认的实现

可以有多个默认方法

不能是静态的

可以重写默认方法

     为什么有默认方法?      之前是通过接口中声明方法   在接口的实现中实现方法    但如果在一个已经运行的程序中有可能出现这样一种情况

对于一个接口可能要求新增一个方法,而这个接口的实现类则必须都去实现这个方法,做出相应的修改

基于这样的考虑  ,java8 的设计者提出了这样一种方法....

例如 --->default  viod   show () { }    这样接口的实现类就都拥有了这样一种行为



默认方法和类的普通方法相比较:

相同点:  都提供了实现  都可以用this表示当前运行的实例

不同点:  类的普通方法可以访问实例到变量 而默认方法不可以,他只能访问接口中的其他成员

--->对于不同点所提出的的默认方法只能访问接口的其他成员 ,而不可以访问实例的变量是因为此处在逻辑上是不可以的 

很简单 ,现有的接口,后有的实现类    ....   重写方法除外


=============================================================

 此处做三块而记录   1/解决冲突  2/标记接口   3/ 函数式接口

1/ 冲突是什么???  在java8 中由于有了默认方法 ,有利有弊,其产生的弊端之一便是冲突

    如: A类有一个方法 show()   B接口有一个默认方法show()    某实现类继承A同时实现了B接口  ,此时这个实现类的实例

在调用show方法时,会出现冲突 ,接口默认方法与父类方法的冲突

        --->结论   :   父类与接口方法冲突时 ,父类优先

            默认方法不能和Object中的方法相同不能同时出现,为什么呢 ?  因为Object是所有类的父类,接口里写了没有调用的可能

当多个接口的默认方法名相同,参数不同是,按照重写规则 ,接口中的默认方法可以重载

当多个接口有完全相同的默认方法时, 子类必须重写该方法

-------------------------------------------------------------------------------

标记接口?  没有任何成员的接口 ,自身没有任何成员,也没有从父接口继承成员

有啥用?用于标记一个类在特定的环境中有特定的意义

在jdk中 

        1./ java.lang.Cloneable    标记接口   表示这个类是可以克隆的

        2./java.io.Serializable    标记接口   表示这个类可以被序列化

        3./java.rmi.Remote     标记接口   和远程调用方法有关 ...?

java 5 引入注解的语法可以实现相同的标记功能   而且性能相对更好  ,此处未做相关资料整理

========================================================

函数式接口: 只有一个抽象方法的接口   , 告别匿名内部类     ( ) -->   

@FunctionalInterface       标记函数式接口注解   jdk8 引入      此注解可选

主要目的 : 用来和lambda表达式关联

  





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值