Java 接口(Interface)
2017-05-25 23:26
866 查看
1、什么是接口?
接口可以理解成一种特殊的类,由常量和公共的抽象方法所组成
类是一种具体的实现体系,而接口定义了某一批类所需要遵循的规范,接口不关心这类类的内部数据,也不关系这些类里方法的实现细节,他只规定这些类必须提供某些方法.
总归来说: 接口可以看做是一种规范。
2、如何定义一个接口?
和类定义不同,定义接口不再使用calss关键字,而是使用interface关键字
3、语法格式如何?
注意事项:
1) 接口通常用来被继承,修饰符只能用public
2) 接口可以多继承,也即使说一个接口可以继承多个接口,关键字还是extends
3) 关于常量 : 接口中的属性是常量, 即使定义时不添加 public static final 修饰符,系统也会自动加上
4)关于方法: 接口中的方法只能是抽象方法,即使定义时 不添加public abstract 修饰符,系统也会自动加上
5)前面学到抽象类,我们知道抽象类包含抽象方法,抽象类需要用abstract修饰,接口也是一样的,即使我们不添加abstract修饰接口,系统也会自动帮我们添加
4、接口有什么特征 ?
公用的、静态的、最终的
5、如何使用(实现)接口?
注意 :
1) 一个类可以实现一个或多个接口,实现接口使用implements关键字。在Java中,一个类只能继承一个父类,是不够灵活的,通过实现多个接口可以做补充
2) 如果要继承父类,继承父类必须在实现接口之前 extends和 implements 不能调换
3) 在接口的使用过程中,还经常与匿名内部类配合使用
4)接口的命名一般都是以I开头
5) 接口的引用可以指向实现了该接口的对象,还可以通过接口去调用该对象的方法,这些方法在类中必须是抽象方法,但是不能使用 new 去创建一个接口对象,这个是错误的。因为接口不包含构造器!!!
6、一个例子说明
场景说明 : 我们都知道,手机(Telephone)分为早期的键盘类型(CellPhone)和现在的智能手机(SmartPhone)。他们有共同的特征就是打电话(call();)和发信息(sendMessage();)功能。CellPhone是通过键盘打电话和键盘发信息的,智能手机是通过语音发短信和语音打电话的。但是呢,只能手机又具备手游(Psp)打游戏功能。
下面我们就上面提供信息结合相关知识实现下。
实现思路多种
1) 定制抽象类Telepone,并声明抽象方法call() 和 sendMessage();
2)创建继承Telphone类CellPhone和SmartPhone两个子类,并分别实现父类的抽象方法
3) 关于智能手机和psp相同特征具有打电话的功能,我们可知道,psp和手机不是相同类型,无法用继承去实现,于是,我们可以考虑用接口,让psp类和SmartPhone分别是实现一个接口。
首先定义一个接口,并声明抽象方法
黏贴一张遵循接口并创建类的示意图,当然,你也可以自动手动添加关键字implements + 接口名
4) main函数调用
输出结果:
demo地址 : http://download.csdn.net/download/qq_18505715/9852546
备注 : 关于接口之间的继承和一个类实现多个接口下一篇博客中介绍,顺便会总结下接口和抽象类之间的区别。
接口可以理解成一种特殊的类,由常量和公共的抽象方法所组成
类是一种具体的实现体系,而接口定义了某一批类所需要遵循的规范,接口不关心这类类的内部数据,也不关系这些类里方法的实现细节,他只规定这些类必须提供某些方法.
总归来说: 接口可以看做是一种规范。
2、如何定义一个接口?
和类定义不同,定义接口不再使用calss关键字,而是使用interface关键字
3、语法格式如何?
[修饰符] (abstract这个关键字系统藏式添加) interface 接口名 [extends 父接口1,父接口2...] { // 零个到多个的常量定义 // 零个到多个的抽象方法的声明 }
注意事项:
1) 接口通常用来被继承,修饰符只能用public
2) 接口可以多继承,也即使说一个接口可以继承多个接口,关键字还是extends
3) 关于常量 : 接口中的属性是常量, 即使定义时不添加 public static final 修饰符,系统也会自动加上
4)关于方法: 接口中的方法只能是抽象方法,即使定义时 不添加public abstract 修饰符,系统也会自动加上
5)前面学到抽象类,我们知道抽象类包含抽象方法,抽象类需要用abstract修饰,接口也是一样的,即使我们不添加abstract修饰接口,系统也会自动帮我们添加
4、接口有什么特征 ?
公用的、静态的、最终的
5、如何使用(实现)接口?
[修饰符] class 类名 extends 父类名 implements 接口1,接口2.. { //如果继承抽象类,要实现继承的抽象方法,要实现接口中的抽象方法 }
注意 :
1) 一个类可以实现一个或多个接口,实现接口使用implements关键字。在Java中,一个类只能继承一个父类,是不够灵活的,通过实现多个接口可以做补充
2) 如果要继承父类,继承父类必须在实现接口之前 extends和 implements 不能调换
3) 在接口的使用过程中,还经常与匿名内部类配合使用
4)接口的命名一般都是以I开头
5) 接口的引用可以指向实现了该接口的对象,还可以通过接口去调用该对象的方法,这些方法在类中必须是抽象方法,但是不能使用 new 去创建一个接口对象,这个是错误的。因为接口不包含构造器!!!
6、一个例子说明
场景说明 : 我们都知道,手机(Telephone)分为早期的键盘类型(CellPhone)和现在的智能手机(SmartPhone)。他们有共同的特征就是打电话(call();)和发信息(sendMessage();)功能。CellPhone是通过键盘打电话和键盘发信息的,智能手机是通过语音发短信和语音打电话的。但是呢,只能手机又具备手游(Psp)打游戏功能。
下面我们就上面提供信息结合相关知识实现下。
实现思路多种
1) 定制抽象类Telepone,并声明抽象方法call() 和 sendMessage();
public abstract class Telephone { //打电话 public abstract void call(); //发短信 public abstract void sendMessage(); }
2)创建继承Telphone类CellPhone和SmartPhone两个子类,并分别实现父类的抽象方法
/****** 这个是CellPhone类的开始 ******/ public class CellPhone extends Telephone { @Override public void call() { System.out.println("通过键盘打电话"); } @Override public void sendMessage() { System.out.println("通过键盘发信息"); } } /****** 这个是CellPhone类的结束 ******/ /****** 这个是SmartPhone 类的开始 ******/ public class SmartPhone extends Telephone { //继承抽象类,必须实现抽象类的方法 @Override public void call() { System.out.println("通过语音打电话"); } @Override public void sendMessage() { System.out.println("通过语音发信息"); } } /****** 这个是SmartPhone 类的结束 ******/
3) 关于智能手机和psp相同特征具有打电话的功能,我们可知道,psp和手机不是相同类型,无法用继承去实现,于是,我们可以考虑用接口,让psp类和SmartPhone分别是实现一个接口。
首先定义一个接口,并声明抽象方法
public interface IPlayGame { // abstract关键字系统会自动帮助我们 public void playGame(); } //创建psp类并实现 IPlayGame 接口 public class Psp implements IPlayGame { @Override public void playGame() { System.out.println("psp具有打游戏的功能"); } } // SmartPhone 也实现接口 IPlayGame public class SmartPhone extends Telephone implements IPlayGame{ //继承抽象类,必须实现抽象类的方法 @Override public void call() { System.out.println("通过语音打电话"); } @Override public void sendMessage() { System.out.println("通过语音发信息"); } //实现接口的方法 @Override public void playGame() { System.out.println("智能手机可以玩游戏"); } }
黏贴一张遵循接口并创建类的示意图,当然,你也可以自动手动添加关键字implements + 接口名
4) main函数调用
public static void main(String[] args) { // 接口的引用可以指向实现了该接口的对象 IPlayGame ip1 = new SmartPhone(); ip1.playGame(); IPlayGame ip2 = new Psp(); ip2.playGame(); // 配合内部类使用 IPlayGame ip3 = new IPlayGame() { @Override public void playGame() { System.out.println("使用匿名内部类的方法实现接口1"); } }; ip3.playGame(); new IPlayGame() { @Override public void playGame() { System.out.println("使用匿名内部类的方法实现接口2"); } }.playGame();; }
输出结果:
智能手机可以玩游戏 psp具有打游戏功能 使用匿名内部类的方法实现接口1 使用匿名内部类的方法实现接口2
demo地址 : http://download.csdn.net/download/qq_18505715/9852546
备注 : 关于接口之间的继承和一个类实现多个接口下一篇博客中介绍,顺便会总结下接口和抽象类之间的区别。
相关文章推荐
- Java 学习笔记 (3) -抽象类 abstract 接口 interface 内部类 inner class 继承 extends 实现 implements 包 package
- 归纳Java中的Interface(接口)
- Java之旅(10)多态性 (续) & 接口(interface)
- java例程练习(接口interface)
- java例程练习(接口interface)
- 归纳Java中的Interface(接口)
- 【Java基础】——之抽象类(Abstract)与接口(Interface)
- JAVA interface 声明的interface variable (接口变量,也可称成员变量)是public static final
- java 接口interface的使用
- java 接口(Interface)与 抽象类(abstract class)
- JNDI Java的目录和命名接口(JAVA NAMING AND DERECTORY INTERFACE)
- java interface接口和多继承
- Java中的接口(interface)
- JNDI(Java Naming and Directory Interface,Java命名和目录接口)
- Java中接口(interface)和匿名类
- 温习Java笔记(7):接口interface小记
- java 中的接口(interface)
- Java中的接口(interface)
- 详细解析Java中抽象类和接口的区别 abstract class和interface
- Java接口Interface与抽象类Abstract Class