java 接口的本质_Java基本概念:接口

一、简介

描述:

普通类只有具体实现,抽象类具体实现和规范都有,接口只有规范!

接口就是比抽象类还抽象的抽象类,可以更加规范的对子类进行约束,全面专业地实现了规范和具体实现的分离。

抽象类还提供某些具体实现,接口不提供任何实现,接口中所有方法都是抽象方法。

接口是完全面向规范的,规定了一批类具有的公共方法规范。

从接口的实现者角度看,接口定义了可以向外部提供的服务。

从接口的调用者角度看,接口定义了实现者能提供哪些服务。

接口是两个模块之间通信的标准,通信的规范。如果能把你要设计的系统之间模块之间的接口定义好,就相当于完成了系统的设计大纲,剩下的就是添砖加瓦的具体实现了。做系统设计时往往就是使用面向接口的思想来设计系统。

本质:

接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须能…”的思想。如果你是天使,则必须能飞。如果你是汽车,则必须能跑。如果你好人,则必须干掉坏人。如果你是坏人,则必须欺负好人。

接口的本质是契约,就像我们人间的法律一样,制定好后大家都遵守。

面向对象的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。

作用:

接口的最主要的作用是达到统一访问,因为实现接口的类的方法名相同,但是实现内容不同。

在创建对象的时候用接口类型作为引用的类型,想用哪个实现类去做方法的内部实现,就new该实现类的对象,调用方法的时候就可以直接用接口类型的引用来调用。

二、接口与抽象类的区别

抽象类:

抽象类也是类,除了可以写抽象方法以及不能直接new对象之外,其他的和普通类没有什么不一样的。

声明类的关键字是'class'。

抽象类是用来被继承的,Java中的类是单继承,继承的关键字是'extends'。

抽象类的多态表现:一个抽象类的引用,可以指向这个抽象类的任意子类对象。

接口:

接口已经另一种类型了,和类是有本质的区别的,所以不能用类的标准去衡量接口。

声明接口的关键字是'interface'。

接口是用来被类实现的,Java中的接口可以被多实现,实现的关键字是'implements'。

接口的多态表现:一个接口的引用,可以指向这个接口的任意实现类对象。

三、语法

描述:

接口中可以不写任何方法,但如果写方法了,该方法必须是'public abstract'修饰的抽象方法。

接口中定义抽象方法可以不用显式地声明'public abstract',不写默认就是'public abstract'修饰的。

接口中可以不写任何属性,但如果写属性了,该属性必须是'public static final'修饰的静态常量,且声明的同时就必须赋值,因为接口中不能编写静态代码块。

接口中定义静态常量可以不用显式地声明'public static final',不写默认就是'public static final'修饰的。

接口中没有构造方法,不能被实例化,但允许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例。

一个类可以实现多个接口;一个接口不能实现接口,但可以继承多个父接口。

注意:

接口必须通过类来实现它的抽象方法。

类实现接口时需要实现接口的所有抽象方法,若有抽象方法没实现,这个类就必须声明为抽象类。

一个引用所指向的对象,是有可能实现任何一个接口的。所以使用'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);

*/

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值