Java理论五:接口interface(java面试要点整理)

参考致谢:
https://juejin.cn/post/6844903734053437448
https://juejin.cn/post/6894624582091669517

1 接口

1.1 接口定义

1、Java接口是一系列方法的声明,里面全部是由全局常量和公共的抽象方法所组成。
2、接口是解决Java无法使用多继承的一种手段,在实际中的作用多是制定标准的。
3、接口其实是特殊的抽象类,100%的抽象类,既接口中的方法必须全部是抽象方法。(JDK1.8之前可以这样理解,8之后可以default默认方法)

1.2 接口的基本语法

1、使用 interface定义,实现接口使用implements关键字;

2、接口中的变量:会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误)
接口的方法:会被隐式地指定为且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误)
【JDK1.8】增加了函数式接口可实现默认方法—>也就实现接口发布后,可以改变了!

interface 接口名称{
    全局常量;
    抽象方法;
    default void remove() {。。。}
}

3、(类与接口之间用implements)一个类可以实现多个接口(必须实现接口全部抽象方法);

4、(接口之间用extend)一个接口可以继承多个接口(不是实现)。

5、子类是先继承父类后实现接口(类名 extend C implements A,B)

注意:
1、接口不可以继承普通类,不可以继承抽象类。(接口中只能定义静态常量和抽象方法,普通类和抽象类包含的比他多)
2、接口没有构造方法就不能实例化对象。(实例化的语句中,对象后面括号里的参数就是调用构造函数的参数,如果没有构造方法是不能实例化对象的)

1.3 接口存在的意义

接口的作用主要有两点:

  • 禁止直接为其实例化对象(接口没有构造方法);
  • 打破单继承局限(实现伪多重继承);

2 接口类与其他区别

2.1 抽象类和接口的区别

1.语法层面上的区别

1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
3)接口中不能含有静态代码块static{}以及静态方法static void…,而抽象类可以有静态代码块和静态方法;
4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。

2.设计层面上的区别

1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。

3 接口的幂等性

接口幂等性:同一个接口,多次发出同一个请求,必须保证操作只执行一次。
(支付接口,重复支付会导致多次扣钱 订单接口,同一个订单可能会多次创建。)

幂等性的解决方案

  • 唯一索引
    使用唯一索引可以避免脏数据的添加,当插入重复数据时数据库会抛异常,保证了数据的唯一性。

  • 乐观锁
    这里的乐观锁指的是用乐观锁的原理去实现,为数据字段增加一个version字段.

当数据需要更新时,先去数据库里获取此时的version版本号
select version from tablename where xxx

更新数据时首先和版本号作对比,如果不相等说明已经有其他的请求去更新数据了,提示更新失败。 update tablename set
count=count+1,version=version+1 where version=#{version}

  • 悲观锁
    乐观锁可以实现的往往用悲观锁也能实现,在获取数据时进行加锁,当同时有多个重复请求时其他请求都无法进行操作。

  • 分布式锁
    幂等的本质是分布式锁的问题,分布式锁正常可以通过redis或zookeeper实现;在分布式环境下,锁定全局唯一资源,使请求串行化,实际表现为互斥锁,防止重复,解决幂等。

  • token机制
    token机制的核心思想是为每一次操作生成一个唯一性的凭证,也就是token。一个token在操作的每一个阶段只有一次执行权,一旦执行成功则保存执行结果。对重复的请求,返回同一个结果。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值