Java面向对象之接口

摘要:
内容:1.接口的概念和定义2.类实现接口3.接口的特性4.接口和抽象类之间的区别1.接口的定义和概念(1)类和接口类:具有相同属性和功能的事物的集合接口,可以理解接口比抽象类更抽象。(2) 定义接口定义类的关键字:class定义抽象类的关键字抽象类的定义接口的关键字

内容:

1、接口的概念与定义

2、类实现接口

3、接口的特点

4、接口和抽象类的区别

1、接口的概念与定义

(1)类和接口

类:具有相同属性和功能的事物集合

接口:接口是功能的集合,也就是方法的集合,也就是说接口中只能定义方法,不能定义普通的成员变量

而且接口中的成员方法必须都是抽象的,可以理解接口是比抽象类更加抽象的一种类

(2)接口的定义

定义类的关键字:class

定义抽象类的关键字:abstract

定义接口的关键字:interface

定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件,

这点可以让我们将接口看做是一种只包含了功能声明的特殊类

格式如下:

1 public interface 接口名{
2       // 成员变量: 不能定义普通的成员变量
3       // 成员方法: 必须都是抽象
4       public abstract 返回值类型 方法名();
5 }

使用interface代替了原来的class,其他步骤与定义类相同:

  • 接口中的方法均为公共访问的抽象方法
  • 接口中无法定义普通的成员变量

(3)各种类型之间的关系

  • 类和类之间:继承,只能是单继承,一个子类只能有一个父类
  • 接口和接口之间:继承,可以多继承,一个子接口可以有多个直接父接口
  • 类和接口之间:不叫继承,叫实现(implements),可以多实现,一个类可以实现多个接口

2、类实现接口

类与接口的关系为实现关系,即类实现接口。实现的动作类似继承,只是关键字不同,实现使用implements

其他类(实现类)实现接口后,就相当于声明:”我应该具备这个接口中的功能”。实现类仍然需要重写方法以实现具体的功能

格式:

1 class 实现类 implements 接口 {
2     // 重写接口中所有方法
3 } 

在类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要重写该抽象方法,完成具体的逻辑

  • 接口中定义功能,当需要具有该功能时,可以让类实现该接口,只声明了应该具备该方法,是功能的声明
  • 在具体实现类中重写方法,实现功能,是方法的具体实现

于是,通过以上两个动作将功能的声明与实现分开,此时请思考:类是现实事物的描述,接口是功能的集合

3、接口的特点

接口中成员的特点如下:

  • 接口中可以定义成员变量,但是变量必须用public static final修饰(固定修饰符),这样的变量其实是常量,其值不能改变
  • 接口中可以定义方法,方法也有固定的修饰符,public abstract
  • 接口不可以创建对象(抽象类也不可以创建对象)
  • 实现类必须覆盖掉接口中所有的抽象方法后,实现类才可以实例化。否则实现类是一个抽象类

示例代码:

1 // 接口
2 public interface MyInter {
3     // 接口的成员变量(常量)
4     public static final int a = 3;
5     // 接口的方法
6     public abstract void show();
7 }

注:固定修饰符可以不写也可以按心情想写哪个写哪个,但是不写不代表没有,不写时编译器会自动添加

在开发中最常用的模式:

1 // 一个类继承一个抽象类 同时实现多个接口
2 public class A extends AbstractClassB implements 接口A, 接口B{
3 
4 }

注:A中必须重写抽象类中的抽象方法以及所有接口中的抽象方法!

接口的特点:

  • 接口可以继承接口  A接口继承B接口后,A接口便拥有了A、B两个接口中所有的抽象方法
  • Java支持一个类同时实现多个接口,或一个接口同时继承多个接口
  • 类可以在继承一个类的同时,实现多个接口
  • 接口与父类的功能可以重复,均代表要具备某种功能,并不冲突

4、接口和抽象类的区别

相同点:

  • 都位于继承的顶端,用于被其他类实现或继承
  • 都不能直接实例化对象
  • 都可以包含抽象方法,其子类都必须覆盖重写或实现这些抽象方法

区别:

  • 抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;
  • 接口只能包含抽象方法,而抽象类可以包含抽象方法也可以包含普通方法;
  • 一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
  • 抽象类为继承体系中的共性内容,接口为继承体系外的扩展功能

二者的选用:

  • 优先选用接口,尽量少用抽象类
  • 需要定义子类的行为,又要为子类提供共性功能时才选用抽象类

免责声明:文章转载自《Java面向对象之接口》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇3. 帧定格和导出单帧MyBatis的Example如何按条件排序(Day_35)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ArcGIS Engine栅格数据使用总结

jojojojo2002 原文 ArcGIS Engine栅格数据使用总结 简介:ArcGIS Engine栅格数据使用总结,一个栅格数据集由一个或者多个波段(RasterBand)的数据组成,一个波段就是一个数据矩阵。对于格网数据(DEM数据)和单波段的影像数据,表现为仅仅只有一个波段数据的栅格数据集,而对于多光谱影像数据则表现为具有多个波段的栅格数据...

PHP开发APP接口实现--基本篇

最近一段时间一直在做APP接口,总结一下APP接口开发以来的心得,与大家分享: 1. 客户端/服务器接口请求流程: 安卓/IOS客户端   –> PHP接口 –> 服务器端  –> 数据处理 –> 返回值(客户端接收并处理) APP的通信方式: 客户端 (接口地址:http://app.com/api.php?format=xml/...

SpringBoot启动过程中涉及到了扩展接口

SpringApplicationRunListener接口 1、ApplicationListener接口 是ApplicationContext的事件监听器 2、EnvironmentPostProcessor接口 上下文环境后置处理器,事件中调用 3、PropertySourceLoader接口 自定义配置文件加载器,自己解析配置文件属性...

Anders谈C# 4.0:新功能和展望

刚才刚看完Anders的PDC Talk,感觉C# 4.0的变化不是很大,但是很多改动都方便了用户的使用,有些甚至当初Anders本来不愿意加入的功能最后由于用户的呼声最后还是加进去了(如 Optional Parameters),可见Anders对用户的意见还是非常重视的。稍微总结一下,C# 4.0中有下面这些功能: 1. dynamic/IDynami...

如何解决Linux 系统下 ifconfig 命令无网络接口 ens33

今天我在做Redis的哨兵集群模式的时候,以前都是好的,也不知道从什么时候开始就无法连接Redis服务器了,就是运行如下命令,没有效果:redis-server redis.conf,然后在通过命令查看redis的状态,始终没有启动Redis,命令如下:ps -ef|grep redis 或者 ps -ef|grep 6379 ,查询不到Redis服务器的...

Scala学习(八)---Scala继承

Scala继承 摘要: 在本篇中,你将了解到Scala的继承与Java和C++最显著的不同。要点包括: 1. extends、final关键字和Java中相同 2. 重写方法时必须用override 3. 只有主构造器可以调用超类的主构造器 4. 你可以重写字段 在本篇中,我们只探讨类继承自另一个类的情况。继承特质的内容后面会详细介绍 扩展类...