1. 程式人生 > >JAVA介面的定義與介面的實現

JAVA介面的定義與介面的實現

目錄:

    1.例項引入

    2.補充知識

    3.注意事項

下面先來看一下一個具體的例項:

package fuxi;


/*
 	 (1) 編寫Animal介面,介面中宣告run() 方法
     (2) 定義Bird類和Fish類實現Animal介面
     (3) 編寫Bird類和Fish類的測試程式,並呼叫其中的run()方法
 */

public class fuxi {
	public interface Animal{
		void run();
	}
	
	class Bird implements Animal{
		public void run() {
			System.out.println("鳥不會游泳");
		}
	}
	class Fish implements Animal{
		public void run() {
			System.out.println("魚會游泳");
		}
	}
	public fuxi() {
		// TODO Auto-generated constructor stub	
		System.out.println("生成物件時呼叫建構函式");
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		fuxi Fuxi=new fuxi();
		Bird bird=Fuxi.new Bird();
		bird.run();
		Fish fish=Fuxi.new Fish();
		fish.run();
	}
}

QaQ  其中生成物件的時候 用到了內部類的  所以不明白的有興趣的同學可以去檢視一下前面的文章:

https://blog.csdn.net/qq_37457202/article/details/80636096

好了真槍實彈打完 接下倆講解一下

java中介面方法不管是否加了修飾符都是public。因此在實現的時候修飾範圍不能縮小,只能是public。

public interface A{//定義一個介面
   void show();//沒有修飾符,預設修飾符是public
   public void show1();//顯示定義修飾符是public
}
 
public class A1 implements A{
   public void show(){//不能縮小使用範圍,原來定義的是public,現在只能是public
   }
   public void show1(){//不能縮小使用範圍,原來定義的是public,現在只能是public
   }
}
java 介面中的常量預設是public static final 所以你不需要寫這寫東西.預設也是public static final

1.介面的定義

使用interface來定義一個介面。介面定義同類的定義類似,也是分為介面的宣告和介面體,其中介面體由常量定義和方法定義兩部分組成。定義介面的基本格式如下:

[修飾符] interface 介面名 [extends 父介面名列表]{

[public] [static] [final] 常量;
[public] [abstract] 方法;
}
修飾符:可選,用於指定介面的訪問許可權,可選值為public。如果省略則使用預設的訪問許可權。
介面名:必選引數,用於指定介面的名稱,介面名必須是合法的Java識別符號。一般情況下,要求首字母大寫。
extends 父介面名列表:可選引數,用於指定要定義的介面繼承於哪個父介面。當使用extends關鍵字時,父介面名為必選引數。
方法:介面中的方法只有定義而沒有被實現。

例如,定義一個用於計算的介面,在該介面中定義了一個常量PI和兩個方法,具體程式碼如下:

1 public interface CalInterface   
2 {  
3     final float PI=3.14159f;//定義用於表示圓周率的常量PI  
4     float getArea(float r);//定義一個用於計算面積的方法getArea()  
5     float getCircumference(float r);//定義一個用於計算周長的方法getCircumference()  
6 }

注意:
    與Java的類檔案一樣,介面檔案的檔名必須與介面名相同。
2.介面的實現
介面在定義後,就可以在類中實現該介面。在類中實現介面可以使用關鍵字implements,其基本格式如下:
[修飾符] class <類名> [extends 父類名] [implements 介面列表]{
}
修飾符:可選引數,用於指定類的訪問許可權,可選值為public、abstract和final。
類名:必選引數,用於指定類的名稱,類名必須是合法的Java識別符號。一般情況下,要求首字母大寫。
extends 父類名:可選引數,用於指定要定義的類繼承於哪個父類。當使用extends關鍵字時,父類名為必選引數。
implements 介面列表:可選引數,用於指定該類實現的是哪些介面。當使用implements關鍵字時,介面列表為必選引數。當介面列表中存在多個介面名時,各個介面名之間使用逗號分隔。
    在類中實現介面時,方法的名字、返回值型別、引數的個數及型別必須與介面中的完全一致,並且必須實現介面中的所有方法。例如,編寫一個名稱為Cire的類,該類實現5.7.1節中定義的介面Calculate,具體程式碼如下:

public class Cire implements CalInterface   
{  
    public float getArea(float r)   
    {  
        float area=PI*r*r;//計算圓面積並賦值給變數area  
        return area;//返回計算後的圓面積  
    }  
    public float getCircumference(float r)   
    {  
        float circumference=2*PI*r;      //計算圓周長並賦值給變數circumference  
        return circumference;           //返回計算後的圓周長  
    }  
    public static void main(String[] args)   
    {  
        Cire c = new Cire();  
        float f = c.getArea(2.0f);  
        System.out.println(Float.toString(f));  
    }  
}

3.注意事項

 在類的繼承中,只能做單重繼承,而實現介面時,一次則可以實現多個介面,每個介面間使用逗號“,”分隔。這時就可能出現常量或方法名衝突的情況,解決該問題時,如果常量衝突,則需要明確指定常量的介面,這可以通過“介面名.常量”實現。如果出現方法衝突時,則只要實現一個方法就可以了。下面通過一個具體的例項詳細介紹以上問題的解決方法