接口,内部类,及lambda的定义及用法

接口(引用数据类型):

概念:当一个类中的所有方法都时抽象方法的时候,我们就可以将其定义为接口

  • 接口存在的两个重要意义
    1. 规则的定义
    2. 程序的扩展性

接口的定义和特点:

  • 接口用关键字interface来定义:——public interface 接口名{}
  • 接口不能实例化
  • 接口和类之间是实现关系,通过implements关键字表示

public class 类名 implements 接口名{}

  • 接口的子类(实现类)
    • 要么重要接口中的所有抽象方法
    • 要么是抽象类

特点:java中实现类支持单个接口,也可以实现多个接口(抽象方法没有方法体,不会产生冲突):public class 类名 implements 接口名1,接口名2{}

接口中成员的特点

  • 成员变量

——只能是常量

默认修饰符:public static final

  • 构造方法:没有
  • 成员方法:

只能是抽象方法(jdk7jdk7之前)

默认修饰符;public abstract


jdk8版本后:

1.允许在接口中定义非抽象方法,但是需要使用关键字default修饰,这些方法就是默认方法(作用:解决接口升级的问题)

接口中默认方法的定义格式:

    • 格式:public default 返回值类型 方法名(参数列表){}
    • 范例:public default id show(){}

接口中默认方法的注意事项:

    • 默认方法不是抽象方法,所以不强制被重写,但是可以被重写,重写的时候去掉default关键字
    • public 可以省略,default不能省略
    • 如果实现了多个接口,多个接口中存在相同方法声明,子类就必须对该方法进行重写

2.接口允许调用static静态方法

接口中静态方法的定义格式:

    • 格式:public static 返回值 方法名(参数列表)
    • 范例:public static void show(){}

接口中静态方法的注意事项:

    • 静态方法只能通过接口名调用,不能通过实现名或者类名调用
    • public 可以省略,static 不能省略


类和接口的关系:

类和类的关系:

   继承关系,只能单继承,但可以多层继承

类和接口的关系:

   实现关系,可以单实现,也可以多实现,还可以在继承一个类同时实现多个接口

接口和接口的关系:

   继承关系,可以单继承,也可以多继承;(若子接口继承的两个接口之间存在冲突的默认方法,则子接口要重写默认的方法;

内部类

内部类:就是在一个类中定义一个类。

创建内部类对象的格式:

   外部类名.内部类名 对象名=new 外部类对象().new 内部类对象();

内部类的访问特点:

  • 内部类可以直接访问外部类的成员,包括私有
  • 外部类要访问内部类的成员,必须创建对象

成员内部类:

概述:在类的成员位置定义定义的类

修饰符:成员内部类,也属于(成员),既然是成员就可以被一些修饰符所修饰

  • private:私有成员内部类访问:在自己所在的外部类中创建对象访问。
  • static:

静态成员内部类访问格式:外部类名.内部类名 对象名=new 外部类名。内部类名()

静态成员内部类中的静态方法:外部类名.内部类名.方法名();

局部内部类:

局部内部类是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用,该类可以直接访问外部类的成员,也可以访问方法内的局部变量;

匿名内部类:

概述:匿名内部类本质上是一个特殊的局部内部类(定义在方法内部)

前提:·

格式:new 类名/接口名(){

重写方法;

}

Lambda表达式

lambda表达式的标准格式:

  • 格式:(形式参数)->{代码块}
  • 形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空;
  • 代码块:方法体;

Lambda表达式的使用前提:

  • 有一个接口
  • 接口中有且仅有一个抽象方法

Lambda表达式的省略模式:

省略规则:

  • 参数类型可以省略,但是有多个参数的情况下,不能只省略一个
  • 如果参数有且仅有一个,那么小括号可以省略
  • 如果代码块的语句只有一条,可以省略大括号和分号,甚至是retrun

Lambda表达式和匿名内部类的区别

所需类型不同:

  • 匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
  • lambda表达式:只能是接口

是由限制不同

  • 如果接口中有且仅有一个抽象方法,可以使用lambda表达式,也可以是匿名内部类
  • 如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用lambda表达式

实现原理不同:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值