Java笔记-Interfaces接口(自用+旁征博引+个人理解)

前言:本文仅限于个人java学习过程中的记录,其中不乏对他人博文的引用和见解,如有错误还望指正!


一、接口的概念

接口(Interface):
官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
个人理解:接口是一种特殊的、100%抽象的类,里面含有公共的抽象方法和全局常量。可以在没有多态继承的情况下实现多态功能。接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为100%的抽象类,既接口中的方法必须全部是抽象方法。(JDK1.8之前可以这样理解)

二、为什么用接口?

  • 实现多继承:因为Java不像C++一样支持多继承,所以Java可以通过实现接口来弥补这个局限。 Java的继承只能在接口层面。一个子类无法同时实现对两个父类的继承,但是可以继承很多个接口。
  • 实现解耦:接口也被用来实现解耦。(待补充)
  • 接口和抽象类之间的区别:抽象类内部可能包含非final的变量,但是在接口中存在的变量一定是final,public,static的。

三、接口的性质/特点

  1. 接口里只有全局常量和抽象的公共的方法,这些方法默认是抽象的,只包含方法标识符,不含有方法的具体实现(方法体)。
  2. 一个接口就是描述一种能力,接口说明了一个类必须要做什么和不能做什么,相当于类的蓝图。
    举例:比如“运动员”也可以作为一个接口,并且任何实现“运动员”接口的类都必须有能力实现奔跑这个动作(或者implement move()方法),所以接口的作用就是告诉类,你要实现我这种接口代表的功能,你就必须实现某些方法,我才能承认你确实拥有该接口代表的某种能力。
  3. 不能创造接口的实例,但是,我们可以创建继承自该接口类型的类,对接口中的方法进行覆盖实现,并创建类的对象,该对象就实现了接口中的方法。并且可以调用这个接口中的方法。
  4. 如果一个类实现了一个接口中要求的所有的方法,然而没有提供方法体而仅仅只有方法标识,那么这个类一定是一个抽象类。(必须记住:抽象方法只能存在于抽象类或者接口中,但抽象类中却能存在非抽象方法,即有方法体的方法。接口是百分之百的抽象类)
  5. 一个JAVA库中接口的例子是:Comparator 接口,这个接口代表了“能够进行比较”这种能力,任何类只要实现了这个Comparator接口的话,这个类也具备了“比较”这种能力,那么就可以用来进行排序操作了。
  6. 一个接口可以继承于另一个接口,或者另一些接口,接口也可以继承,并且可以多继承。
  7. 一个类如果要实现某个接口的话,那么它必须要实现这个接口中的所有方法。
  8. 虽然接口内部定义了一些抽象方法,但是并不是所有的接口内部都必须要有方法,比如Seriallizable接口,Seriallizable接口的作用是使对象能够“序列化”,但是Seriallizable接口中却没有任何内容,也就是说,如果有一个类需要实现“序列化”的功能,则这个类必须去实现Seriallizable接口,但是却并不用实现方法(因为接口中没有方法),此时,这个Serilizable接口就仅仅是一个“标识”接口,是用来标志一个类的,标志这个类具有这个“序列化”功能。(待补充)

四、接口的使用

  1. 接口使用关键字implements来实现。在接口中的所有方法都必须只声明方法标识,而不要去声明具体的方法体,因为具体的方法体的实现是由继承该接口的类来去实现的,因此,接口并不用管具体的实现。
  2. 接口中的属性默认为Public Static Final。(没有protected)
  3. 一个类实现这个接口必须实现这个接口中定义的所有的抽象方法。(必须override)

一个简单的接口

public interface A {
	// public static final constant
	final int a = 10;
	// public abstract
	void show();
}

为了实现这个接口,我们使用implements关键词去实现接口:

public class Test implements A {
	// must implementing the capabilities of the interface
	void show(){
		System.out.println("Show!");
	}
}

既然你要实现接口,也就是实现接口代表的一种能力,那么你就必须去实现接口给你规定的方法,只有把接口给你规定的抽象方法都给实现了,才承认你这个类实现了这个接口,实现了这个接口代表的某种功能。上图实现了接口中规定的show()方法。

public class TestClass {
	public static void main(String[] args) {
		TestClass d = new TestClass();
		d.show();
	}
}

写一个测试类,用来测试一下我们刚才实现的这个接口,因为TestClass类的对象d实现了接口规定的show方法,那么自然而然就可以调用show()方法。

五、参考文献

原文链接:https://blog.csdn.net/qq_19782019/article/details/80259836

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值