接口的基础语法

接口:

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、接口中只允许出现常量和抽象方法

注:以后接口使用的比抽象类多,一般抽象类使用的还是少。接口一般都是对“行为"的抽象。