一、简介

描述:

  • 普通类只有具体实现,抽象类具体实现和规范都有,接口只有规范!
  • 接口就是比抽象类还抽象的抽象类,可以更加规范的对子类进行约束,全面专业地实现了规范和具体实现的分离
  • 抽象类还提供某些具体实现,接口不提供任何实现,接口中所有方法都是抽象方法
  • 接口是完全面向规范的,规定了一批类具有的公共方法规范。
  • 从接口的实现者角度看,接口定义了可以向外部提供的服务。
  • 从接口的调用者角度看,接口定义了实现者能提供哪些服务。
  • 接口是两个模块之间通信的标准,通信的规范。如果能把你要设计的系统之间模块之间的接口定义好,就相当于完成了系统的设计大纲,剩下的就是添砖加瓦的具体实现了。做系统设计时往往就是使用面向接口的思想来设计系统。

本质:

  • 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须能…”的思想。如果你是天使,则必须能飞。如果你是汽车,则必须能跑。如果你好人,则必须干掉坏人。如果你是坏人,则必须欺负好人。
  • 接口的本质是契约,就像我们人间的法律一样,制定好后大家都遵守。
  • 面向对象的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。

作用:

  • 接口的最主要的作用是达到统一访问,因为实现接口的类的方法名相同,但是实现内容不同。
  • 在创建对象的时候用接口类型作为引用的类型,想用哪个实现类去做方法的内部实现,就new该实现类的对象,调用方法的时候就可以直接用接口类型的引用来调用。

二、接口与抽象类的区别

抽象类:

  1. 抽象类也是类,除了可以写抽象方法以及不能直接new对象之外,其他的和普通类没有什么不一样的。
  2. 声明类的关键字是'class'
  3. 抽象类是用来被继承的,Java中的类是单继承,继承的关键字是'extends'
  4. 抽象类的多态表现:一个抽象类的引用,可以指向这个抽象类的任意子类对象

接口:

  1. 接口已经另一种类型了,和类是有本质的区别的,所以不能用类的标准去衡量接口。
  2. 声明接口的关键字是'interface'
  3. 接口是用来被类实现的,Java中的接口可以被多实现,实现的关键字是'implements'
  4. 接口的多态表现:一个接口的引用,可以指向这个接口的任意实现类对象

三、语法

描述:

  1. 接口中可以不写任何方法,但如果写方法了,该方法必须是'public abstract'修饰的抽象方法
  2. 接口中定义抽象方法可以不用显式地声明'public abstract',不写默认就是'public abstract'修饰的。
  3. 接口中可以不写任何属性,但如果写属性了,该属性必须是'public static final'修饰的静态常量,且声明的同时就必须赋值,因为接口中不能编写静态代码块。
  4. 接口中定义静态常量可以不用显式地声明'public static final',不写默认就是'public static final'修饰的。
  5. 接口中没有构造方法,不能被实例化,但允许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例。
  6. 一个类可以实现多个接口;一个接口不能实现接口,但可以继承多个父接口

注意:

  • 接口必须通过类来实现它的抽象方法。
  • 类实现接口时需要实现接口的所有抽象方法,若有抽象方法没实现,这个类就必须声明为抽象类。
  • 一个引用所指向的对象,是有可能实现任何一个接口的。所以使用'instanceof'关键字判断一个接口类型引用时,只要'instanceof'关键字右边的类或接口不是'final'修饰的,就能编译通过。运行结果看引用指向的对象类型是否为右边的类的子类或实现类。

示例:

interface A {
int NUM = 1; void testA();
} interface B {
void testB();
} interface C extends A, B {
void testC();
} class Student implements C {
public void testA() {
} public void testB() {
} public void testC() {
} public void testD() {
}
} class Teacher {
} public class Test {
public static void main(String[] args) {
/* c只能调用接口C中声明和继承的方法 */
C c = new Student();
System.out.println(c instanceof A);//true
System.out.println(c instanceof B);//true
System.out.println(c instanceof C);//true
System.out.println(c instanceof Student);//true
System.out.println(c instanceof Object);//true
System.out.println(c instanceof Teacher);//false
/*
以下代码编译报错
System.out.println(o instanceof String);
*/
}
}

Java基本概念:接口的更多相关文章

  1. Java学习之接口概念

    Java语言只支持单重继承,不支持多继承,即一个类只能有一个父类.但是在实际应用中,又经常需要使用多继承来解决问题.为了解决该问题,Java语言提供接口来实现类的多继承问题. 接口(英文interfa ...

  2. java抽象类和接口区别

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

  3. 【java】聊聊java里的接口

    接口的概念 java中的接口用于描述类应该具备什么样的功能,而不给出具体的实现,一个类可以“实现”多个接口 [注意]接口不是类,而是对类的一组描述   还是让我们通过一个例子来看看接口如何运作吧!   ...

  4. JAVA线程概念

    一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程.比如在 ...

  5. -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中

     本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁  sleep()和wait()方法的区别 为什么wait( ...

  6. 第十八节:详解Java抽象类和接口的区别

    前言 对于面向对象编程来说,抽象是它的特征之一. 在Java中,实现抽象的机制分两种,一为抽象类,二为接口. 抽象类为abstract class,接口为Interface. 今天来学习一下Java中 ...

  7. Java抽象类和接口的比较

    一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体 ...

  8. Java 8函数式接口functional interface的秘密

    Java 8函数式接口functional interface的秘密 2014年10月29日 17:52:55 西瓜可乐520 阅读数:3729   目录 [−] JDK 8之前已有的函数式接口 新定 ...

  9. JavaSE入门学习20:Java面向对象之接口(interface)(一)

    一Java接口 接口(英文:interface)是抽象方法和常量值的集合,在Java编程语言中是一个抽象类型,接口通常以interface来声 明.类是一种详细实现体.而接口定义了某一批类所须要遵守的 ...

随机推荐

  1. Java基础进阶

    Java基础进阶J Object类 hashcode() toString() clone() getClass() notify() wait() equals() Random类 生成 随机数 U ...

  2. Java中详述线程间协作

    线程协作 首先引入一段代码: package 线程间数据共享; import java.util.Date; public class Watch { private static String ti ...

  3. hbase Master is initializing

    重装hbase后导致出险问题:hbase(main):007:0> create 'test_t2','f1' ERROR: org.apache.hadoop.hbase.PleaseHold ...

  4. CF-1354 E. Graph Coloring(二分图,背包,背包方案输出)

    E. Graph Coloring 链接 n个点m条边的无向图,不保证联通,给每个点标号1,2,3.1号点个数n1,2号点个数n2,3号点个数n3.且每条边的两点,标号之差绝对值为1.如果有合法方案, ...

  5. 2019牛客暑期多校训练营(第八场)B-Beauty Values(期望线性性)

    >传送门< 题意:思路:期望的线性性(可加性),比赛的时候写的代码超级无敌长,不过值得欣慰的是一发AC了,官方的题解写的还不错~ 我们可以把每种数字对答案的贡献分开来计算,即枚举每个数字, ...

  6. 2020牛客暑期多校训练营(第八场)Interesting Computer Game

    传送门:Interesting Computer Game 题意 给出n对数,你可以操作n次,每次操作只能在下面三种中选择一种,问最多可以选多少个不同的数字. 什么都不做 如果a[i]以前没选过,那么 ...

  7. 【noi 2.6_2000】&【poj 2127】 最长公共子上升序列 (DP+打印路径)

    由于noi OJ上没有Special Judge,所以我是没有在这上面AC的.但是在POJ上A了. 题意如标题. 解法:f[i][j]表示a串前i个和b串前j个且包含b[j]的最长公共上升子序列长度 ...

  8. P3399 丝绸之路(DP)

    题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚.西亚和欧洲,将那里的香 ...

  9. 51Nod - 1632

    B国拥有n个城市,其交通系统呈树状结构,即任意两个城市存在且仅存在一条交通线将其连接.A国是B国的敌国企图秘密发射导弹打击B国的交通线,现假设每条交通线都有50%的概率被炸毁,B国希望知道在被炸毁之后 ...

  10. Operating System:信号量

    pv原语操作(1)操作系统PV意思:PV操作与信号量的处理相关,P表示通过的意度思,V表示释放的意思.(2)p操作和v操作是不可中断问的程序段,称为原语.如果将信号量看作共享变量,则pv操作为其临界区 ...