java接口:interface 的和抽象類:abstract

1、接口的定義:關鍵詞: interface   abstract 

package com.sky.bean;

public interface People {
    public abstract void printPeopleType(); //抽象方法,實現類必須得重寫它
}

2、接口的實現類:關鍵詞:    implements    @Override 

package com.sky.bean;
public class Student implements People {
    @Override
    public void printPeopleType() {
        System.out.print("\n學生");
    }
}
package com.sky.bean;
public class Teacher implements People {
    @Override
    public void printPeopleType() {
        System.out.print("\n老師");
    }

}

3、使用接口的好處

一、 對外只是以一個函數名的形式,沒有實際實現內容,保護源碼java

二、實現統一入口,多個實現的擴展ide

package com.sky.run;
import com.sky.bean.People; //接口
import com.sky.bean.Student;//People接口的實現類 1
import com.sky.bean.Teacher;//People接口的實現類 2

public class Main {

    public static void main(String[] args) {
        //可擴展成不一樣的實現
        printPeopleType(new Student()); //輸出學生
        printPeopleType(new Teacher()); //輸出老師
    }
    private static void printPeopleType(People people) {
        //統一入口
        people.printPeopleType();

    }
    
}

4、 接口的注意事項

1. 接口不能用於實例化對象,但能夠聲明,後面能夠new 實例化它的實現類給這個接口聲明對象。函數

2. 接口沒有構造方法。spa

3. 接口中全部的方法必須是抽象方法。(java新特性,容許接口方法爲非抽象!).net

4. 接口不能包含成員變量,寫了不能使用,由於不能實例化接口,如何調用?除了 static 和 final 變量。由於能夠直接經過類名調用!code

5. 一個接口實現類能夠同時實現多個接口類。對象

package com.sky.bean;

public class Student implements People,People2 {

    @Override
    public void printPeopleType() {
        System.out.print("\n學生");
    }

    @Override
    public void printPeopleType2() {
        System.out.print("\n學生2");

    }
}
package com.sky.run;
import com.sky.bean.People; //接口
import com.sky.bean.Student;//People接口的實現類 1
import com.sky.bean.Teacher;//People接口的實現類 2

public class Main {
    public static void main(String[] args) {
        //可擴展成不一樣的實現
        Student student = new Student();
        printPeopleType(student); //輸出接口1:People ----學生1
        student.printPeopleType2();// 輸出接口2:People2 ----學生2
        printPeopleType(new Teacher());

    }
    private static void printPeopleType(People people) {
        //統一入口
        people.printPeopleType();
    }

}

5、與抽象類的區別

1. 抽象類除了不能實例化對象以外,類的其它功能依然存在,成員變量、成員方法和構造方法的訪問方式和普通類同樣。因爲抽象類不能實例化對象,因此抽象類必須被繼承,才能被使用。繼承

父類(抽象類)接口

package com.sky.service;

public abstract class Father {
    public String a = "  經過super取得父類的屬性值 a";
    public void fun1(){
        System.out.print("\n 這是 Father.fun1()");
    }
}

子類(繼承父類)get

package com.sky.service;

public class Child extends Father {

    //重寫
    @Override
    public void  fun1(){
        System.out.print("\n 這是 Father.fun1() 在子類被 重寫"+super.a);

    }
    //重載
    public void fun1(String str){
        System.out.print("\n 這是 Father.fun1() 在子類被 "+str+super.a);

    }
    public  void fun2(){
        System.out.print("\n 這是 子類本身獨有的方法,非繼承方法");
    }
}

不能實例化父類,由於它是抽象類,須要經過繼承它的子類訪問它的屬性和方法

Child child = new Child();
child.fun1();  //重寫父類的方法
child.fun1("重載");  //重載父類的方法
child.fun2();  //子類新增的方法,非繼承

2. 而接口類是什麼都沒有,就只有一個空殼子!

相關文章
相關標籤/搜索