接口
一、接口是用來擴展方法的
二、接口的特點:
1.接口用關鍵字interface來表示
interface 接口名{}
2.類實現接口用implements關鍵字
class 類名 implements 接口名{}
3.接口不能被實例化,但是可以用多態的方式實例化(類似抽象類)
4.接口的子類
a:可以是抽象類,但是意義不大
b:可以是具體類,要重寫所有接口中抽象方法
三、接口成員特點
1.成員變量:只能是常量,且是靜態的
默認修飾符:public static final (建議手動給出)
2.構造方法:沒有構造方法
3.成員方法:所有成員方法都是抽象的
默認修飾符:public abstract (建議手動給出)
四、關係區別
類與類:繼承,只能單繼承,不能多繼承,可以多層繼承
類與接口:實現,可以單實現,也可以多實現,還可以繼承+多實現
class Son extends Father implements Sister,Brother{}
接口與接口:繼承,可以單繼承,也可以多繼承
interface Sister extends Father,Mother{}
五、老師學生實例:
/*
老師和學生案例,加入抽菸的額外功能
分析:從具體到抽象
老師:姓名,年齡,喫飯,睡覺
學生:姓名,年齡,喫飯,睡覺
由於有共性功能,我們提取出一個父類,人類。
人類:
姓名,年齡
喫飯();
睡覺(){}
抽菸的額外功能不是人或者老師,或者學生一開始就應該具備的,所以,我們把它定義爲接口
抽菸接口。
部分老師抽菸:實現抽菸接口
部分學生抽菸:實現抽菸接口
實現:從抽象到具體
使用:具體
*/
//抽菸接口
interface Smoking{
public abstract void smoke();
}
//人類
abstract class Person{
private String name;
private int age;
public Person() {}
public Person(String name,int age) {
this.name=name;
this.age=age;
}
public void sleep() {
System.out.println("睡覺");
}
public abstract void eat() ;
public void show() {
System.out.println("姓名:"+name+" 年齡:"+age);
}
}
//學生類
class Student extends Person{
public Student() {}
public Student(String name,int age) {
super(name,age);
}
public void eat() {
System.out.println("學生喫食堂");
}
}
//老師類
class Teacher extends Person{
public Teacher() {}
public Teacher(String name,int age) {
super(name,age);
}
public void eat() {
System.out.println("老師回家喫");
}
}
//抽菸學生
class SmokingStudent extends Student implements Smoking{
public SmokingStudent() {}
public SmokingStudent(String name,int age) {
super(name,age);
}
public void smoke() {
System.out.println("學生抽菸");
}
}
//抽菸老師
class SmokingTeacher extends Teacher implements Smoking{
public SmokingTeacher() {}
public SmokingTeacher(String name,int age) {
super(name,age);
}
public void smoke() {
System.out.println("老師抽菸");
}
}
class Test{
public static void main(String[] args) {
//創建抽菸學生對象並測試
SmokingStudent ss=new SmokingStudent("林青霞",20);
ss.show();
ss.eat();
ss.smoke();
ss.sleep();
System.out.println("-----------------");
//創建抽菸老師對象並測試
SmokingTeacher st=new SmokingTeacher("劉意",40);
st.show();
st.eat();
st.smoke();
st.sleep();
}
}