一、接口(Interface)

在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

1、接口的声明

1.1 接口的声明语法格式如下:[可见度] interface 接口名称 [extends 其他的接口名] {

// 声明变量

// 抽象方法

}

1.2 Interface关键字用来声明一个接口。下面是接口声明的一个简单例子。/* 文件名 : DemoInterface.java */

import java.lang.*; //引入包

public interface DemoInterface {

//任何类型 final, static 字段

//抽象方法}

1.3 接口有以下特性:

a、接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。

b、接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。

c、接口中的方法都是公有的。

2、接口的实现

当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。

2.1 接口的实现语法格式如下:...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ...

实例如下:Animal.java 文件代码:/* 文件名 : Dog.java */

public class Dog implements Animal{

public void eat(){

System.out.println("Dog eats");}

public static void main(String args[]){

Dog d = new Dog ();

d.eat();}}

2.2 重写接口中声明的方法时,需要注意以下规则:

类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常。

类在重写方法时要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型。

如果实现接口的类是抽象类,那么就没必要实现该接口的方法。

2.3 在实现接口的时候,也要注意一些规则:

一个类可以同时实现多个接口。

一个类只能继承一个类,但是能实现多个接口。

一个接口能继承另一个接口,这和类之间的继承比较相似。

3、接口的继承

一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。// 文件名: Grandfather.java

public interface Grandfather

{public void setSaveMoney(double money);}

// 文件名: Father.java

public interface Father extends Grandfather

{public void setSaveHouse (int num);}

// 文件名: Son.java

public interface Son extends Father

{public void setSaveCulture ();}

Son接口自己声明了一个方法,从Father接口继承了两个方法,这样,实现Son接口的类需要实现三个方法。

4、接口的多继承

在Java中,类的多继承是不合法,但接口允许多继承。public interface Son extends Father,Grandfather

5、接口特点

1.接口可以多继承

2.接口的方法声明必须是 public abstract 即便不写默认也是

3.接口里面不能包含方法具体实现,只声明

4.类继承接口必须实现接口里申明的全部方法,除非该类是抽象类

5.类里面可以声明 public static final 修饰的变量

6.接口不能被实例化,但是可以被实现类创建

6、什么时候使用抽象类和接口

1、 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。

2、 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。

3、如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

4、在 JDK1.8,允许我们给接口添加两种非抽象的方法实现:

1)、默认方法,添加 default 修饰即可;

2)、静态方法,使用 static 修饰;示例如下:interface Test{

//这个是默认方法

default String get(String aa){

System.out.println("我是jdk1.8默认实现方法...");

return "";}

//这个是静态方法

static void staticmethod(){

System.out.println("我是静态方法");}}

调用得话,静态方法只能通过接口名调用,不可以通过实现类的类名或者实现类的对象调用,default 方法只能通过接口实现类的对象来调用。

7、接口的含义理解

接口可以理解成统一的协议, 而接口中的属性也属于协议中的内容。但是接口的属性都是公共的,静态的,最终的。

接口的成员特点:

1、成员变量只能是常量,默认修饰符 public static final

2、成员方法只能是抽象方法。默认修饰符 public abstract所以,Java 接口中,使用变量的时候,变量必须被赋值。//所以接口定义属性

public interface People {

int age=10;

String name="输出名字"; // 接口里面定义的成员变量都是 public static final 修饰

public void eat();  }

所有的变量必须给出初始值,且绝对不会被修改,因为隐藏的修饰符为 public static final。

8、Java 抽象类和接口总结

1、abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个 interface。

2、在 abstract class 中可以有自己的数据成员,也可以有非 abstarct 的成员方法,而在 interface 中,只能够有静态的不能被修改的数据成员(也就是必须是 static final 的,不过在 interface 中一般不定义数据成员),所有的成员方法都是 abstract 的。

3、abstract class 和 interface 所反映出的设计理念不同。其实 abstract class 表示的是 "is-a" 关系,interface 表示的是 "has-a" 关系。

4、实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

5、接口中定义的变量默认是 public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

6、抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

7、接口中的方法默认都是 public,abstract 类型的。

java的接口怎么理解_如何理解Java 中的接口相关推荐

  1. java 接口和虚构_深入理解Java的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  2. java封装继承多态的理解_深入理解Java封装、继承、多态

    一:封装 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问,常见的实现方式就是:getter.setter. 封装遵循了"开闭原则&qu ...

  3. java如果不使用多态_深入理解java多态没有烤山药的存在,java就不香了吗?

    @ 我不想知道各位理解java多态没有烤山药的存在,java香不香的问题了,我不要你们认为,我只要我觉得 (感觉要被打....) 在博主认为多态绝对是面向对象的第三大特性中让很多小白同学以及初学者难以 ...

  4. 深入java虚拟机 第四版_深入理解Java虚拟机-常用vm参数分析

    Java虚拟机深入理解系列全部文章更新中... https://blog.ouyangsihai.cn/shen-ru-li-jie-java-xu-ni-ji-java-nei-cun-qu-yu- ...

  5. java jvm垃圾回收算法_深入理解JVM虚拟机2:JVM垃圾回收基本原理和算法

    本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 喜欢的话麻烦点下Star哈 文章将同步到我的个人博客: www.how ...

  6. java虚拟机的生命周期_深入理解Java虚拟机——JVM的生命周期

    package test; public class JVMTestLife { public static void main(String[] args) { new Thread(new Run ...

  7. java8的函数式接口的好处_浅谈Java 8 新增函数式接口到底是什么

    从 Java 8 开始便出现了函数式接口(Functional Interface,以下简称FI) 定义为: 如果一个接口只有唯一的一个抽象接口,则称之为函数式接口.为了保证接口符合 FI ,通常会在 ...

  8. 内存分段分页机制理解_深入理解虚拟机,JVM高级特性-自动内存管理机制

    什么是自动内存管理机制? 对于java程序员来说,有一点是要比C/C++程序员要方便的,那就是程序在运行时,java程序不需要为每一个对象其编写对应的释放内存的代码,JVM虚拟机将为你在合适的时间去释 ...

  9. java 获取 反射 方法 名_乐字节Java反射之一:反射概念与获取反射源头Class

    一.Java反射机制概念 "程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言",如Python, Ruby是动态语言:显然C++,Java,C#不是动态语言,但是JAV ...

最新文章

  1. Golang中调用“方法”的简单理解
  2. 解决VS2017使用scanf报错问题
  3. 年少恶习累累,成年用语言骗全世界, 用心理学撩妹, 最后被总理接见
  4. 汇编语言中常用指令对标志位寄存器的影响
  5. c malloc 头文件_C/C++求职者必备 23 道面试题,一道试题一份信心!
  6. Pytest之基本介绍
  7. Ubuntu 安装adb/fastboot工具
  8. unknow host service.gradle.org, proxy settings in gradle
  9. SmartBear继SoapUI Pro 5 2之后推出新版本改名SoapUI NG Pro
  10. 最详细版本|UI2Code智能生成Flutter代码——版面分析篇...
  11. 推荐一款DataGridView的打印解决方案
  12. matlab序列码,Matlab7 R14(sn 序列号)
  13. linux 类似迅雷下载软件,推荐几个可以替代迅雷的下载软件
  14. 智伴机器人传销_智伴机器人是传销吗?
  15. 个人博客项目之editormd实现文章详情页面预览
  16. 刷题记录:牛客NC23803DongDong认亲戚
  17. STM32读写RAM
  18. C语言如何实现寻找峰值函数,findpeaks 寻找峰值函数
  19. 京东云鼎服务器系统时间问题-时间戳参与与服务器时间差异大于设定值
  20. Mars 开源月报(2020.3)

热门文章

  1. Python的locals()函数
  2. 服务器操作系统文件共享设置,服务器操作系统文件共享设置
  3. 计算机网络基础ios指令,蔡少云——计算机网络实验:IOS命令基础及交换机基本配置.doc...
  4. linux下cmake-gui的安装
  5. IDLE 策略算法 放置奇兵 小破船翻船记录(悬空岛——冒险(航海))
  6. python numpy:array、asarray、asanyarray的区别
  7. python 理解Matplotlib 3D (三维图) 绘图函数 plot_surface 的 rstride 和 cstride参数
  8. python中如将一个文件夹中的多张图片都进程序?
  9. 其它项目中引用AirSIm模块报错NullReferenceException: Object reference not set to an instance of an object
  10. Spring bean注入之注解注入-- @Autowired原理