第六章——java接口与实现
比抽象类更规范的可多继承标准
一、知识结构框架
二、知识点详解
1、接口
定义方式:使用interface定义接口,接口的定义与类的定义相似,class改为interface作为接口的声明。
- 声明:interface
- 接口体:没有变量和普通的方法,只有常量和抽象方法(方法默认被public abstract修饰)。
2、实现接口
**类实现接口:**与继承类似,使用implements声明该类实现一个或多个接口。
**重写接口的方法:**若一个非抽象类实现了某个接口,则这个类必须重写这个接口中的所有方法。重写时要去除abstract修饰符,给出方法体,使用public修饰(不能降低权限)。
**注意:**程序可以用接口名访问接口的常量,如果一个类实现了接口,那么该类可以直接在类体中使用该接口的常量。如果一个类声明实现了一个接口,若其为抽象类,则可以不重写借口的方法。即抽象类可以重写也可以直接拥有接口的方法。
**接口修饰:**如果interface前加public关键字修饰,则该接口称为public接口,可以被任何一个类实现。若无public,则称为友好接口,友好接口可以被与该接口同一个包中的类实现。
若父类实现了某个接口,则子类自然实现该接口,不用再次声明,接口可以被接口使用extends继承,子接口将继承父类接口中的全部方法和常量。
3、接口回调
接口属于引用型变量,接口变量可以存放实现该接口的类的实例的应用,即可以存放对象的引用。这句话的意思是,接口与类相似属于引用型变量,可以用接口名声明创造一个接口变量,该接口变量存放着对象的引用。
**指针回调:**在C语言中表示变量的地址在某一时刻存放存放在一个指针变量中,通过指针变量间接操作该变量中存放的数据。该处“回调”借用此定义。
**定义:**接口回调指可以把实现某一接口的类创建的对象的引用赋值给该接口声明的接口变量,则该接口变量可以调用被类实现的接口方法。实际上,当接口变量调用被类实现的接口方法时,就是通知相应的对象调用这个方法。
理解:将实现某个接口的类创建的对象,赋值给该接口声明的变量。这个变量就可以调用被类实现的接口方法,将此调用称为接口的回调。
4、接口与多态
不同的类在实现同一个接口时可能具有不同的实现方式,则接口回调时可能具有多种形态。
体现在:实现接口重写方法的多样性,从而导致接口回调的多样性。
5、接口参数
如果一个方法的参数是接口类型,我们就可以将任何实现该接口的类的实例的引用传递给该接口参数,那么接口参数就可以回调类实现的接口方法。
例子
interface 男朋友的标准{
void 干饭();//默认有public abstract
}
class 你的男友 implements 男朋友的标准{
public void 干饭(){//要显示的写出public
System.out.println("一顿八碗饭")
}
}
class 约会吃饭{
public void 上菜(男朋友的标准 标准){//该方法接收的参数为接口类型
标准.干饭();
}
}
public class 约会{
public static void main(String[] args){
约会吃饭 吃饭 = new 约会吃饭();
吃饭.上菜(new 你的男友());
//将实现该接口的类的实例的引用(即该类创建的对象),传递给该方法作为接口参数。则该接口参数可以回调该类实现的(干饭)接口方法。
}
}
6、abstract类与implements接口的比较
- abstract类和接口都可以有abstract方法,但是抽象类也可以有非abstract方法,而接口只能有abstract方法
- abstract类中可以有常量也可以存在变量,但是抽象类中只能有常量,不能存在变量
三、题库考查知识点整理
1、在接口中,编译器认为int MAX = 100;就是 public static final int MAX = 100;
2、在接口中,protected void start();会导致编译出错。
3、接口中会默认给方法添加public abstract修饰词,默认给变量添加public static final修饰词。
4、类声明class Stu extends People implements Com 意思是Stu类是People类的子类,父类People实现Com接口。
5、一个接口可以继承多个接口。
6、一个类声明实现一个接口,但没有重写接口中的所有方法,那么这个类必须是抽象类。
7、接口中的常量不可以不指定初值,因为编译器不会提供默认值。所以在接口中,int MAX;会导致编译出错。
8、如果一个非abstract类实现某个接口,该类必须重写接口中的全部abstract方法。可以用接口名直接访问接口中的常量。能用abstract修饰接口。
9、一个类声明实现一个接口,但没有重写接口中的所有方法,那么这个类必须是抽象类。子接口将继承父接口中的全部方法和常量。接口变量中可以存放实现该接口的类的实例的引用(对象的引用)。
10、把实现某一接口的类创建的对象的引用赋值给该接口变量,那么该接口变量就可以调用被类实现的接口方法。接口中的常量必须指定初值。
11、任何一个类都可以实现public接口。如果一个类和友好接口在同一个包里,就允许它实现该接口。