您的位置:首页 > 其它

文章标题

2016-03-07 20:22 281 查看

接口的相关知识

接口里不能包含普通方法,接口里的所有方法都是抽象方。java8允许在接口中定义默认方法,默认方法可以提供方法实现;

类是一种具体实现体;接口定义了一种规范,接口定义了某一批类所需遵守的规范,它不关心这些类的具体实现,她只规定了这一批类必须实现的方法;只要提供这些方法的实现,都符合这个接口;

接口内部方法没有方法体

她体现的是规范和实现分离的设计思想;以主板上的PCI插槽为例,只要一块显卡遵守了PCI的接口规范,就可以插入插槽,与主机正常通讯;主机并不关心这一块显卡是谁实现的,内部如何实现;

因此:接口定义的是多个类共同的公共行为规范;这些行为是与外部交流的通道;

接口的定义

[修饰符] interface 接口名称 extends 父接口,...{
静态常量
抽象方法
内部类
}


1、接口里面不能包含的有
a、构造器
b、初始化块

2、接口里可以包含的有
a、静态常量(只有这个成员变量)
b、方法:抽象实例方法、类方法、默认方法(default)
c、内部类(包括内部接口、枚举)

3、注意点
a、默认修饰符为包权限访问控制符protected,也可以是public
b、接口命名常用形容词,老规矩,首字母大写
c、接口里的所有成员都必须是public访问权限
d、接口里的常量系统会默认增加static和final修饰符
即int MAX_C=12;与
public static final int MAX_C=12;结果一样
e、接口里的普通方法默认都用public abstract修饰,即没方法体;
f、类方法、和默认方法都必须有方法体
g、默认方法必须使用default修饰,不能使用static,因此他属于接口实现类的实例;


接口实例

public interface Output{
//定义静态常量
int MIN_XING=122;
//接口里定义的普通方法也是用public修饰的抽象方法
void say();
void hello(String msg);
//定义类方法
//类方法需要static修饰
static String staticTest(){
return "hello,world";
}
//定义默认方法
default void test(){
System.out.println("默认方法用default修饰");
}
}


接口的继承

接口支持多继承,且只能继承接口;子接口在扩展父接口的时候,和类继承一样,也会获得父接口里定义的所有抽象方法、常量;

使用接口

注意事项

1、一个类实现一个或多个接口,这个类就必须实现接口里所有的抽象方法
2、一个类实现某个接口的时候,该类将会获得接口中定义的常量、方法等;


所以接口的主要用途如下:

1、定义变量,以及进行强制类型转换
2、调用接口中定义的常量
3、被其他类实现


接口和抽象类的异同

1、接口和抽象类的特征

a、接口和抽象类都不能被实例化,用于被其他类实现和继承;
b、都可以包含抽象方法;


2、区别

a、接口作为系统与外界交互的窗口,体现的是一种设计规范
a.1对于接口的实现者而言,接口规定了实现者必须实现的一些方法
a.2对于接口的调用者而言,接口规定了调用者可以调用哪些方法(服务)
b、接口里只能包含抽象实例方法和默认方法,不能为普通方法提供方法体;而抽象类可以包含完整的普通方法;
c、接口里面只能定义静态常量,不能定义非静态常量,而抽象类都可以
d、接口里面不可以包含构造器;抽象类里面可以有构造器,但是并不是用于创建抽象类的对象,而是让其子类来调用这些构造器来完成属于抽象类的初始化过程;
e、接口里面不可以有初始化代码块,抽象类里面阔以有;


核心(功能):

1、当在一个程序中使用接口时,接口是多个模块间的耦合标准;

2、当在多个程序间使用接口时,接口是多个程序之间的通信标准


总结

1、接口类似于整个系统的“总纲”,它指定了系统各模块应该遵循的标准,因此不应该经常改变;

2、抽象类作为系统中多个类的共同父类,更多的体现的是一种设计模式;


接口体现的是一种规范和实现分离的哲学;利用接口可以极好的降低系统的各模块之间的耦合度;,从而提高系统的可扩展性和可维护性;

还剩下两种常见的场景来示范面向接口编程的优势;p196
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: