接口定义了一系列的抽象方法和常量,形成一个属性集合。

接口定义完成后任何类都可以实现接口,而且一个类可以实现多个接口。

实现接口的类必须实现接口中定义的抽象方法,具体实现细节由类自己定义。可以说接口定义了类的框架,它实际上是一种完全的抽象类。

接口的定义格式:

修饰符 interface 接口名 {
// 声明变量
类型 变量名; // 声明方法
返回值类型 方法名(参数);
}

接口定义注意一下几点:

  1. 接口的修饰符只能为默认的(无修饰符)或者public。当修饰符为默认时,接口是包可见的,在几口所在的包之外的类不能使用接口。修饰符为public时,任何类都可以使用该接口。
  2. 接口的名字应该符合Java的标识符规定。
  3. 接口内可以声明变量,接口内的变量被自动设置为共有的(public)、静态的(static)、最终的(final)。
  4. 接口定义的方法都是抽象,他们被自动地设置为public。
  5. 接口也被保存为.java文件,文件名和类名相同。
public interface Animal {
void breath();
} public class Tiger implements Animal {
public void breath() {
System.out.println("老虎用肺呼吸");
}
} public class Test {
public static void main(String[] args) {
Tiger tiger = new Tiger();
tiger.breath();
}
}

接口之间也可以有继承关系。继承接口的接口拥有它的父接口的方法,它还可以定义自己的方法,实现这个子接口的类,要实现所有这些方法。

public interface Animal {
void breath();
} public interface Mammal extends Animal {
void run();
} public class Tiger implements Mammal {
  // 类要实现接口的所有方法
public void breath() {
System.out.println("老虎用肺呼吸");
} public void run() {
System.out.println("老虎用四条腿跑");
}
} public class Test {
public static void main(String[] args) {
Tiger tiger = new Tiger(); tiger.breath();
tiger.run();
}
}

跟抽象类一样,接口也不可以实例化,但是可以声明接口类型的变量,它的值必须是实现了该接口的类的对象。

// 只能调用在 Animal 接口中定义的方法
Animal tiger= new Tiger();
// 通过强制转换,就可以调用
((Tiger) tiger).run();
((Mammal)tiger).run(); // 在 Animal 和 Mammal 中定义的方法都可以调用
Mammal tiger = new Tiger();

接口的另一个重要应用是用它来创建常量组。

类可以直接使用接口中定义的常量。把一些固定的常量组值放在接口中定义,然后在类中实现该接口,

public interface Day {
int MORNING = 1;
int ARTERNOON = 2;
int NIGHT = 3;
} public class Test implements Day {
public static void main(String[] args) {
System.out.println(MORNING + "," + ARTERNOON + "," + NIGHT);
}
}

抽象类和接口的比较:

  1. 一个类可以实现多个接口,但是只能继承一个抽象类。
  2. 抽象类可以有抽象的方法,也可以有已经实现的方法,继承它的子类可以对方法进行重写,而接口中定义的方法必须全部为抽象方法。
  3. 在抽象类中定义的方法,它们的修饰符可以是publib、protected、private,也可以是默认值,但是在接口中定义的方法全是public。
  4. 抽象类可以有构造函数,接口不能。两者都不能实例化,但是都能通过他们来存放子类对象或实现类的对象,也可以说它们都可以实现多态。

最新文章

  1. Oracle没有WM_CONCAT函数的解决办法
  2. PHP文件上传
  3. java基础3_流程控制语句
  4. 服务器端PHP多进程编程
  5. SVM详解
  6. [Git] --no-verify
  7. 关于const *和 * const
  8. 有关求任意一个正整数的n的因数的个数的求解思路
  9. xddpay.com 个人支付接口接入流程
  10. WebAPI调用笔记
  11. Raspberry 音乐播放器omxplayer安装
  12. OpenTracing:开放式分布式追踪规范
  13. javascript加密PHP解密---jsencrypt
  14. 一键PHP/JAVA安装工具
  15. thinkphp中data方法
  16. bzoj千题计划163:bzoj1060: [ZJOI2007]时态同步
  17. soj1011. Lenny's Lucky Lotto
  18. C++11-新增正则表达式
  19. WCF系列教程之WCF服务配置
  20. js中时间的操作

热门文章

  1. jsonp 跨域2
  2. git的搭建与简单实用
  3. POJ 2309 BST(树状数组Lowbit)
  4. OPENVZ低版本centos6.5安装BBR加速手记
  5. DevExpress WPF入门指南:加载动画的应用
  6. “开始菜单”按钮今年8月将重回Windows 8
  7. 深入理解Linux网络技术内幕——设备的注册与初始化(二)
  8. React 源码剖析系列 - 不可思议的 react diff
  9. C++语言的一些问题
  10. react 学习日记