接口的基础语法
- 接口:
1、接口也是一种"引用数据类型",编译后也是一个字节码文件;
2、接口是完全抽象的(抽象类是半抽象);或者也可以说接口是特殊的抽象类。 - 接口的定义和语法
1、语法:
[修饰符列表] interface 接口名{}
2、接口支持多继承,一个接口可以继承多个接口。
interface C extends A, B {
}
- 接口中只包含两部分内容(只有这两部分):
一部分是:常量。
一部分是:抽象方法。 - 在接口中
1、所有的元素都是public修饰的(都是公开的);
2、抽象方法定义时:public abstract修饰符可以省略;
//public abstract int sum(int a, int b);
int sum(int a, int b);
//public abstract修饰符可以省略
3、方法都是抽象方法,所以接口中的方法不能有方法体。
4、接口中的常量
接口中随便写一个变量就是常量
//常量
//public static final double PI = 3.1415926;
double PI = 3.1415926;/*public static final可以省略,
但不代表不存在,所以这里的PI还是一个常量*/
类实现接口
- 接口的基础语法:
1、类和类之间叫做继承,类和接口之间叫做实现。
2、仍然可以将"实现"看做"继承"。
继承使用extends关键字完成;
实现使用implements关键字完成。
3、当一个非抽象的类实现接口的话,必须将接口中所有的对象方法全部实现(覆盖、重写)。
4、实现时必须加上public(权限只能更高,不能更低)。
package com.zyh.jieKou;
public interface MyMath{
int sum(int a, int b);
int sub(int a, int b);
}
package com.zyh.jieKou;
class MyMathImpl implements MyMath{
public int sum (int a, int b){
return a + b;
}
public int sub (int a, int b){
return a - b;
}
}
- 一个类可以同时实现多个接口
弥补了java中类和类只支持单继承的缺陷。 - 关于接口之间的强转
1、接口和接口之间在进行强制类型转换的时候,没有继承关系,也可以强转。(调用其它接口中的方法,需要转型->接口转型)
2、但是一定要注意,运行时可能会出现classCastException异常。例如:
接口A和接口B虽然没有继承关系,但是写代码的时候可以互转。编译器没意见,但是运行时可能出现: ClassCastException - 继承和实现都存在时
extends关键字在前;implements关键字在后。
接口在开发中的作用
- 类似于多态在开发中的作用(多态:面向抽象编程,不要面向具体编程。降低程序的耦合度,提高程序的扩展力。)
- 接口可以解耦合
任何一个接口都有调用者和实现者;
接口可以将调用者和实现者解耦合;
调用者面向接口调用;
实现者面向接口编写实现。
类和类之间的关系
- is a、has a、like a
1、is a:
Cat is a Animal (猫是一个动物)凡是能够满足is a的表示"继承关系”。
A extends B
2、has a
He has a Pen (他有一支笔)凡是能够满足has a关系的表示"关联关系",关联关系通常以"属性"的形式存在。
A{
B b;
}
3、like a
Cooker like a FoodMenu (厨师像一个菜单一样)凡是能够满足like a关系的表示"实现关系",实现关系通常是:类实现接口。
A implements B
抽象类和接口有什么区别?
- 只说语法上的区别,至于以后抽象类和接口应该怎么进行选择,通过后面的项目去体会/学习。
- 1、抽象类是半抽象的;
接口是完全抽象的。
2、抽象类中有构造方法;
接口中没有构造方法。
3、接口和接口之间支持多继承;
类和类之间只能单继承。
4、一个类可以同时实现多个接口;
一个抽象类只能继承一个类(单继承)。
5、接口中只允许出现常量和抽象方法
注:以后接口使用的比抽象类多,一般抽象类使用的还是少。接口一般都是对“行为"的抽象。