• <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • Java面向對象
    Java異常
    Java數組
    Java常用類
    Java集合
    Java IO流
    Java線程
    Java反射
    Socket編程
    Java注解開發
    Java GoF設計模式
    HashMap
    Java內存模型
    Java線性表

    Java接口

     

     

    Java接口概述

     

    計算機中的接口有哪些? USB接口 , VGA接口,  耳機接口,  電源接口, HDMI高清接口,  Type-C接口, Thunder接口。

     

    計算機通過這些接口可以連接不同的外設, 擴展了計算機的功能 , 計算機實現了某個接口,就具備了連接這個接口設備的功能, 沒有實現該接口就不具備該功能。

     

    計算機中有USB插槽, 不管是鍵盤/鼠標/硬盤/打印機,只要有USB插頭就可以連接到電腦上, 這些設備是不同廠商生產的, 它們都遵循USB協議。

     

    Java程序中的接口是用來擴展類的功能的,可以把接口理解為功能的封裝, Java中的接口也可以理解為一個操作規范(協議)。

     

     

    Java接口定義與實現

     

    ● Java接口定義的語法:

     

    [修飾符]   interface  接口名 {

    接口中的方法默認使用public abstract修飾

    接口中的字段默認使用 public static final修飾

    接口中可以定義public static 靜態方法

    定義public  default方法

    }

     

    ●Java接口的使用

     

    [修飾符]  class  類名  implements  接口{

     

    需要重寫接口的抽象方法

     

    package com.wkcto.chapter01.interfaces.demo01;
    /**
     * 定義飛行接口
     * 		封裝飛行功能
     * @author 蛙課網
     *
     */
    public interface Flyable {
    	//接口中的方法默認使用public abstract修飾
    	void fly();
    	
    }

     

    package com.wkcto.chapter01.interfaces.demo01;
    /**
     * 定義鳥類
     * 	一個類實現了接口,需要重寫接口中抽象方法
     * 
     * @author 蛙課網
     *
     */
    public class Bird implements Flyable {
    
    	@Override
    	public void fly() {
    		System.out.println("小鳥在天空中自由飛翔");
    	}
    
    }

     

    練習:定義接口封裝游泳功能, 魚會游泳, 小狗會游泳, 人會游泳。

     

     

    Java接口多態

     

    package com.wkcto.chapter01.interfaces.demo01;
    /**
     * 1) 接口是一種引用數據類型,可以定義變量,但是接口不能實例化對象, 接口引用可以賦值實現類對象
     * 2) 接口多態 , 通過接口引用調用接口中抽象方法,實際上執行的是實現類對象的方法
     * 		接口存在的意義就是為了實現多態.
     * 
     * @author 蛙課網
     *
     */
    public class Test {
    
    	public static void main(String[] args) {
    		//1)接口定義變量
    		Flyable flyable ;
    		//2)接口不能實例化對象
    //		flyable = new Flyable(); 		//Cannot instantiate the type Flyable
    		//3)接口引用可以賦值實現類對象
    		flyable = new Bird();
    		flyable.fly();
    		
    		flyable = new Plane();
    		flyable.fly();
    		
    	}
    
    }

     

    package com.wkcto.chapter01.interfaces.demo01;
    /**
     * 測試彈弓可以把能飛的物體給射出去
     * @author 蛙課網
     *
     */
    public class Test02 {
    
    	public static void main(String[] args) {
    		//創建彈弓對象
    		Slingshot slingshot = new Slingshot();
    		//創建鳥對象
    		Bird bird = new Bird();
    		slingshot.shoot(bird);
    		
    		//創建飛機對象
    		Plane plane = new Plane();
    		slingshot.shoot(plane);
    		
    	}
    
    }

     

    package com.wkcto.chapter01.interfaces.demo01;
    /**
     * 彈弓類
     * 		可以把任何能飛物體給彈射出去
     * 
     * 經常, 把接口的引用作為方法的形參, 在調用方法時,傳遞接口實現類的對象
     * @author 蛙課網
     *
     */
    public class Slingshot {
    	//可以把任何能飛物體給彈射出去, 如果這個物體實現了Flyable飛行接口就能飛
    	public void shoot( Flyable flyable ) {
    		//實際上是物體 在飛
    		flyable.fly();
    	}
    }

     

    練習:游泳館只接收會游泳的動物來游泳。

     

     

    Java接口說明

     

    ● 類實現了某個接口,需要重寫接口中的抽象方法,就具備了接口中定義的功能; 如果一個類實現了接口,沒有重寫接口中所有的抽象方法,這個類需要定義為抽象類。

     

    ● 一個類可以實現多個接口, 接口名之間使用逗號分隔, 這個類需要重寫所有接口中所有的抽象方法。

     

    ● 接口也能繼承,并且支持多繼承, 在子接口中可以擴展接口的功能。

     

    ● 接口的內容在JDK8中, 只包含四部分: public abstract默認的方法, public static final默認的字段, public static靜態方法, public default方法。

     

     

    Java抽象類與接口的異同點

     

    相同點

     

    ● 都可以定義抽象方法

     

    ● 都不能實例化對象

     

    ● 接口/抽象類的抽象方法都需要被重寫

     

    ● 接口/抽象類中都可以定義 public static final字段, public static靜態方法

     

    不同點

     

    ● 意義不同

     

    抽象類對類進行更高層級的抽象

     

    接口是對功能的封裝

     

    ● 定義方式不同

     

    抽象類使用 abstract  class定義

     

    接口使用interface定義

     

    ● 內容不同

     

    抽象類中除了可以定義抽象方法外, 還可以定義實例變量/實例方法/靜態變量/靜態方法,構造方法等普通類所有的成員。

     

    接口中除了抽象方法外, 還可以定義public static final字段, public static方法,public default方法 。

     

    抽象類有構造方法, 接口沒有構造方法; 接口中可以使用default修飾方法,抽象類不能使用default修飾方法。

     

    ● 使用方式不同

     

    抽象類一般作為父類存在, 需要子類通過extends繼承。

     

    接口需要通過類implements實現。

     

    ● 繼承

     

    類只支持單繼承, 接口支持多繼承

     

    ● 應用場景不同

     

    如果僅僅是為了擴展類的功能,優先選擇接口;

     

    如果除了功能外,還需要保存不同的數據,選擇抽象類,  抽象類中的抽象方法,需要在子類中重寫, 抽象類可以約束所有的子類都具有某個功能。

     

     

    Java接口的應用

     

    ● 接口就是功能的封裝

     

    如在Flyable接口中封裝了fly()飛行功能, 如果類實現了Flyable接口,需要重寫fly()方法,就擴展了類的功能。

     

    如系統定義的Comparable接口, 封裝了比較兩個對象的功能, 如果一個類想要比較兩個對象的大小, 可以實現Comparable接口。

     

    package com.wkcto.chapter01.interfaces.demo03;
    /**
     * 定義Person類,
     * 	想要讓Person類的對象具有比較大小的功能, 可以通過實現Comparable接口完成這個需求
     * 	Comparable接口后面的<T>是一個泛型 ,泛型就是把數據類型作為參數
     * 		通過Comparable后面的泛型指定比較對象的數據類型
     * @author 蛙課網
     *
     */
    public class Person implements Comparable<Person> {
    	String name;
    	int age;
    	int height;
    	
    	/**
    	 * 重寫接口的抽象方法, 指定比較規則
    	 * 如果當前對象比參數o對象大就返回正數,  如果當前對象小于參數對象返回負數, 如果兩個對象相等返回0
    	 */
    	@Override
    	public int compareTo(Person o) {
    		//在該方法中,指定比較規則,根據年齡比較
    		return this.age - o.age;
    	}
    
    	public Person(String name, int age, int height) {
    		super();
    		this.name = name;
    		this.age = age;
    		this.height = height;
    	}
    
    	
    }

     

    ● 接口可以理解為一組操作規范(一個協議)

     

    百度新聞包含首頁/體育/游戲/女人/汽車等模塊, 不管哪個模塊都有添加新聞,刪除新聞,修改新聞,查詢新聞. 可以把這些功能定義在一個接口中, 不同的模塊通過實現這個接口來統一他們的操作。

     


     

    提倡面向接口的編程

     

    ● 接口的使用比較靈活, 一個類在繼承父類的同時,可以實現多個接口

     

    描述打工的學生, 打工的學生既有學生的特點,又有工人的特征,如果允許類的多繼承的話,可以直接讓打工的學生同時繼承學生類與工人類。

     

    Java不允許多繼承, 可以讓打工的學生繼承學生類, 把打工這個操作定義為接口, 打工的學生實現打工接口。

     

    描述了打工的學生,從某種程度上,還能解決類的多繼承問題

     

    package com.wkcto.chapter01.interfaces.demo04;
    /**
     * 定義學生類,作為父類
     * @author 蛙課網
     *
     */
    public class Student {
    	String name;
    	
    	public void study() {
    		System.out.println("學生的本職工作是學習");
    	}
    }

     

    package com.wkcto.chapter01.interfaces.demo04;
    /**
     * 定義工作接口
     * @author 蛙課網
     *
     */
    public interface Workable {
    	void  work();
    }

     

    package com.wkcto.chapter01.interfaces.demo04;
    /**
     * 打工的學生類
     * 		在繼承Student類的同時,實現Workable接口
     * @author 蛙課網
     *
     */
    public class PartTimeStudent extends Student implements Workable, Singable {
    
    	//重寫接口中的抽象方法
    	@Override
    	public void work() {
    		System.out.println("兼職服務員,日結,工資800~1500");
    	}
    
    	@Override
    	public void sing() {
    		System.out.println("學生參加了中國好聲音");
    	}
    
    }

     


     

    練習1

     

    1、描述帶橡皮的鉛筆,鉛筆是一種筆,有擦除的功能。

     

    2、接口比較容易擴展, 可以實現代碼的可插拔

     

    經常把接口的引用作為方法的形參, 在調用方法時,可以傳遞各種實現類對象

     

    彈弓可以彈射能飛的物體, 游泳館只接收會游泳的動物

     

    3、接口可以使項目分層

     

    一臺計算機可以實現很多不同的接口, 接口比較靈活

     

    計算機的USB插槽, 只要有USB插頭的設備就可以連接到電腦上, 接口易擴展

     

    生產電腦的廠商有聯想/Dell/華碩等, 生產USB設備的也有很多不同的廠商, 使項目分層

     

     

     

    在上圖的模型中, 通過接口把項目簡單的分為兩層, 一個團隊負責開發業務邏輯,一個小組負責開發數據庫的操作及優化, 對開發人員的要求降低了;當數據庫發生變化后,只需要由數據庫的開發人員定義一個專門的操作數據庫的類即可, 業務邏輯代碼不需要更改。

     

    package com.wkcto.chapter01.interfaces.demo05;
    /**
     * 定義操作數據庫的接口
     * 	在接口中定義一組操作數據庫的規范
     * @author 蛙課網
     *
     */
    public interface DaoService {
    	void add();			//向數據庫中添加數據
    	void delete();		//刪除數據
    	void update();		//修改數據
    	void list();		//顯示所有數據
    }

     

    package com.wkcto.chapter01.interfaces.demo05;
    /**
     * 業務邏輯模塊1
     * 		操作數據庫, 通過DaoService接口實現
     * @author 蛙課網
     *
     */
    public class LogicModel1 {
    	DaoService dao; 			//定義一個接口的引用
    	
    	//添加數據
    	public void addData() {
    		System.out.println("業務邏輯模塊1, 需要向數據庫中添加數據");
    		dao.add();
    	}
    	
    	//刪除數據
    	public void deleteData() {
    		System.out.println("業務邏輯模塊1, 需要從數據庫中刪除數據");
    		dao.delete();
    	}
    	
    	//修改數據
    	public void updateData() {
    		System.out.println("業務邏輯模塊1, 需要在數據庫中修改數據");
    		dao.update();
    	}
    	
    	//顯示所有數據
    	public void listAllData() {
    		System.out.println("業務邏輯模塊1, 需要從數據庫中顯示所有數據");
    		dao.list();
    	}
    }

     

    package com.wkcto.chapter01.interfaces.demo05;
    /**
     * 定義一個操作MySQL數據庫的類, 需要實現DaoServic接口
     * @author 蛙課網
     *
     */
    public class MySqlDaoImpl implements DaoService {
    
    	@Override
    	public void add() {
    		System.out.println("向MySQL數據庫中添加數據");
    	}
    
    	@Override
    	public void delete() {
    		System.out.println("從MySQL數據庫中刪除數據");
    	}
    
    	@Override
    	public void update() {
    		System.out.println("在MySQL數據庫中修改數據");
    	}
    
    	@Override
    	public void list() {
    		System.out.println("從MySQL數據庫中查詢所有數據");
    	}
    
    }

     

    package com.wkcto.chapter01.interfaces.demo05;
    /**
     * 測試業務邏輯模塊操作數據庫
     * @author 蛙課網
     *
     */
    public class Test {
    
    	public static void main(String[] args) {
    		LogicModel1 model1 = new LogicModel1();
    		
    		//需要配置業務邏輯模塊中dao接口引用 
    //		model1.dao = new MySqlDaoImpl();
    		//如果數據庫由MySQL換為Oracle, 需要定義一個操作ORacle數據庫的類,修改業務邏輯模塊 dao接口的配置
    		model1.dao = new OracleDaoImpl();		
    		
    		model1.addData();
    		model1.updateData();
    		model1.deleteData();
    		model1.listAllData();
    		
    	}
    
    }

     

     

    練習2

     

    模擬所有動物都可以使用自己的交流方式進行交流, 人說人話,狗說狗語。

     

     

     

    package com.wkcto.chapter01.interfaces.demo06;
    /**
     * 定義說話方式接口
     * @author 蛙課網
     *
     */
    public interface Speakable {
    	void speak(); 			//說話
    }
    

     

    package com.wkcto.chapter01.interfaces.demo06;
    /**
     * 汪語
     * 	是一種說話方式
     * @author 蛙課網
     *
     */
    public class WangWang implements Speakable {
    
    	@Override
    	public void speak() {
    		System.out.println("汪汪汪~~~~");
    	}
    
    }

     

    package com.wkcto.chapter01.interfaces.demo06;
    /**
     * 定義動物類
     * 	每個 動物都有自己的說話方式
     * 	動物可以使用自己的說話方式進行交流
     * @author 蛙課網
     *
     */
    public abstract class Animal {
    	Speakable  speakable; 		//每個 動物都有自己的說話方式
    	
    	public Animal(Speakable speakable) {
    		super();
    		this.speakable = speakable;
    	}
    
    	//可以使用自己的說話方式進行交流
    	public void talk() {
    		speakable.speak();
    	}
    }

     

    package com.wkcto.chapter01.interfaces.demo06;
    /**
     * 小狗是一種動物
     * @author 蛙課網
     *
     */
    public class Dog extends Animal {
    	
    	public Dog(Speakable speakable) {
    		super(speakable);
    	}
    
    }

     

    package com.wkcto.chapter01.interfaces.demo06;
    /**
     * 測試每種動物可以使用自己的說話方式進行交流
     * @author 蛙課網
     *
     */
    public class Test {
    
    	public static void main(String[] args) {
    		
    		WangWang wangWang = new WangWang(); 		//小狗的說話方式 		
    		Dog dahuang = new Dog(wangWang);			//在創建小狗對象時,需要指定它的說話方式
    		dahuang.talk();
    		
    		MiaoMiao miaoMiao = new MiaoMiao();
    		Cat mimi = new Cat(miaoMiao);
    		mimi.talk();
    		
    		
    	}
    
    }

     

    全部教程
  • <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • 面对面棋牌游戏