46.接口數組
當一個抽象類,若是抽象類中的全部方法都是抽象的,那麼咱們就能夠把它定義爲一個接口,接口是對行爲的抽象。類是對屬性和行爲的抽象。this
語法對象
interface 接口名{繼承
方法定的定義;接口
….開發
}get
(1)接口的特徵:class
1.接口中的方法的定義不須要Abstract來修飾,默認就是抽象的擴展
2.不能夠實例化的,須要有類來實現接口,實現接口的語法:jdk
class 類名 implements 接口名,接口名,…{
//實現每個接口中的方法
}
3.接口中的方法不能和private,static和final共存,
4.在接口中能夠定義」屬性」,能夠經過接口的實現類的實例來訪問(不推薦),推薦使用接口名.常量,這是一個常量默認是public, static ,final,屬性不能修改
注意:常量的定義命名的規範要使用大寫,單詞之間要用「_」分隔。
5.接口能夠繼承接口,多級繼承或者多繼承,interface C extends A,B{},繼承的接口中重複的方法會合並
interface May{
public static final double IP=3.14;
//Abstract來修飾,默認就是抽象的
public void marry();
}
interface April{
public void met();
}
//接口能夠多繼承接口
interface June extends May,April{
public void givebirth();
}
//類的實現能夠實現多個
class Cal implements May,April{
int r;
public static void main(String[] args){
Cal c=new Cal();
c.r=5;
//調用接口中的方法能夠用實現接口的類的實例對象來調用也能夠用接口調用,推薦後者
System.out.println(5*5*c.IP);
}
//實現接口的類中要實現接口的每個方法
public void marry(){
}
public void met(){
}
}
(2)接口的應用
例子:正方形和圓的周長和麪積
interface Sp{
double IP=3.14;
//抽象計算周長的方法
public double getLong();
//抽象計算面積的方法
public double getArea();
}
//定義一個Rect類實現Sp的方法
class Rect implements Sp{
int r;
public double getLong(){
return 4*r;
}
public double getArea(){
return r*r;
}
public Rect(int r){
this.r=r;
}
}
//定義一個Circle類實現Sp中的方法
class Circle{
int r;
public double getLong(){
return 2*r*Sp.IP;
}
public double getArea(){
return r*r*Sp.IP;
}
public Circle(int r){
this.r=r;
}
}
public class Calculate{
public static void main(String[] args){
Rect a=new Rect(4);
Circle b=new Circle(10);
System.out.println("正方形的周長是"+a.getLong()+"\t正方形的面積是"+a.getArea());
System.out.println("圓的周長是"+b.getLong()+"\t圓的面積是"+b.getArea());
}
}
注意:容易出現的問題忘記寫主方法,調用方法忘記加括號,單詞寫錯
(3)接口在JDK1.8中的特性
第一點:靜態方法——接口在JDK1.8及以後的版本能夠有靜態方法
interface A{
//接口中定義一個靜態方法,能夠在其餘類中直接調用這個方法語法:接口名.靜態方法名(引用),可是這個方法必須是public static
public static void printArr(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+"\t");
}
}
}
//建立一個類調用接口中的靜態方法,這個類能夠實現接口也能夠不實現,能夠是主類也能夠不是主類
class Jdk1{
public static void main(String[] args){
//建立一個數組
int[] arr=new int[]{1,2,3,4,5,6};
//調用靜態方法打印數組
A.printArr(arr);
}
}
第二點:默認方法——接口在JDK1.8及以後的版本定義默認方法(default)
接口中的默認方法能夠在實現該接口的類中不寫出來,默承認以實現調用,若是類中實現了,建立該類的對象優先調用類中實現的方法
interface A2{
//建立一個方法權限修飾符後面跟着default,注意default和static不能同時存在,這個方法是默認方法
public default void sleep(){
System.out.print("調用默認方法");
}
}
//建立一個類實現接口
public class Jdk2 implements A2{
public static void main(String[] args){
Jdk2 j=new Jdk2();
//調用在實現接口的類中默認實現的方法
j.sleep();
}
}
(4)實現接口的好處
1. 接口定義的是一種標準,能夠使代碼分層開發,分模塊開發。
2. 下降代碼的耦合度,提升代碼的可擴展性和可維護性
3. 接口改進了單繼承的侷限。
(5)接口和抽象類的區別:
1.接口是行爲的抽象能夠有靜態方法,抽象方法和默認方法,抽象類中能夠有全部方法。
2.接口和抽象類都不能實例化,接口須要類來實現後實例化實現類,抽象類須要類來繼承而後實例化子類。
3.抽象類只能單繼承,接口能夠多繼承接口(jdk1.7),接口還能夠多實現。
4.接口中的「屬性」是public static final類型的,抽象類中的屬性跟普通類中的屬性沒有區別。
5.接口中的方法默認就是抽象的不須要加absract,抽象類中的抽象方法須要加abstract關鍵字。