接口的基础语法
1、接口也是这一种“引用数据类型”,编译之后会产生class字节码文件。
2、接口是完全抽象的。(抽象类是半抽象的)。或者说接口是特殊的抽象类
3、接口的定义:
[修饰符列表] interface 接口名{}
4、接口支持多继承,一个接口继承多个接口。
5、接口中只包含两部分内容,一部分是:常量。一部分是:抽象数据类型。接口没有其他内容。
6、接口所有元素都是public修饰的。(公开的)
7、接口中的方法不能有方法体。
8、接口中的抽象方法定义时,public abstract 修饰符可以省略
9、接口中的常量的public static final可以省略。
10、类与类之间叫继承,类与接口之间叫做实现。
继承使用extends关键字完成
实现使用implements关键字完成
11、当一个非抽象的类实现接口的话,必须将接口中所有的抽象方法全部实现(覆盖、重写)
12、实现抽象方法的public不能省略。
因为方法重写的权限不能变低。
13、一个类可以同时实现多个接口
interface MyMath1{
double PI = 3.1415926;
int sum(int a, int b);
int sub(int a,int b);
}
class MyMathImp1 implements MyMath1{
/*不加public
int sum(int a,int b){
}
报错: 正在尝试分配更低的访问权限; 以前为public
*/
public int sum(int a,int b){
return a + b ;
}
public int sub(int a,int b){
return a - b;
}
关于接口怎么使用多态继承的例子:
public class Test02 {
public static void main(String[] args) {
//错误:MyMath1是抽象的,无法实例化
//new MyMath1();
//父类型引用指向子类型的对象
MyMath1 mm = new MyMathImp1();
int result1 = mm.sum(10,20);
System.out.println(result1);
int result2 = mm.sub(20,10);
System.out.println(result2);
}
}
interface MyMath1{
double PI = 3.1415926;
int sum(int a, int b);
int sub(int a,int b);
}
class MyMathImp1 implements MyMath1{
public int sum(int a,int b) {
return a + b;
}
public int sub(int a,int b){
return a - b;
}
}
如果既有继承又有实现该怎么写代码?
继承在前,实现在后。接口的实现类似于硬件,插上就能用,不插就不能用。
public class Test03 {
public static void main(String[] args) {
Flyable f = new Cat();
f.fly();
}
}
//动物类
class Animal {
}
//可飞翔的接口
interface Flyable{
void fly();
}
//猫类 带有可飞翔接口的猫
class Cat extends Animal implements Flyable{
public void fly(){
System.out.println("飞猫起飞!");
}
}
接口的作用:解耦合
1、实现面对接口编程,可以降低程序的耦合度,提高程序的扩展力,复合ocp开发原则。
开闭原则(Open Closed Principle),简称OCP。
软件实体应该对扩展开放,对修改关闭。
2、接口的使用离不开多态机制。(接口+多态才能达到降低耦合度)
3、任何一个接口都有调用者和实现者。接口负责将调用者和实现者解耦合。
调用者面向接口调用,实现者面向接口编写实现。
类型与类之间的关系
is a、has a、like a
is a :
Cat is a Animal
凡是满足is a的表示“继承关系”
has a:
I has a Pen
凡是满足has a关系的表示“关联关系”
关联关系通常以“属性”的形式存在
like a:
Cooker like a FoodMenu
凡是能够满足like a关系的表示“实现关系”
实现关系通常是:类实现接口
抽象类和接口语法上有什么区别?
1、抽象类是半抽象的。
接口是完全抽象的。
2、抽象类中没有构造方法。
接口中没有构造方法。
3、接口与接口之间支持多继承
类与类只能单继承
4、一个类可以同时实现多个接口
一个抽象类只能继承一个类
5、接口中只允许出现常量和抽象方法