java繼承與多型-介面的學習
阿新 • • 發佈:2021-01-24
介面即使多個類的公共規範。
介面時一種引用資料型別,最重要的內容就是其中的:抽象方法。
如何定義一個介面的格式:
public interfa 介面名稱{
//介面內容
}
備註:換成了關鍵字interface之後,編譯生成的位元組碼檔案任然是:Java—>.class。
如果是Java 7 那麼介面中可以包含的內容有
1.常量
2.抽象方法
如果時Java 8,還可以包含
3.預設方法
4.靜態方法
5.私有方法
介面使用步驟:1.介面不能直接使用,必須有一個“實現類”來”實現“該介面。
格式:public class 實現類名稱implement 介面名稱{
//。。。
}
2.介面的實現類必須覆蓋重寫(實現)介面中所有的抽象方法。
3.建立實現類的物件進行使用。
注意事項:如果實現類並沒有覆蓋重寫介面中所有抽象方法,那麼這個實現類自己就必須時抽象類。
原因;繼承介面之後將介面中所有的抽象方法都繼承下來了,抽象方法所在的類就是抽象類。
public class demo01Interface {
public static void main(String[] args) {
//MyInterfaceAbstract myInterfaceAbstract=new MyInterfaceAbstract();錯誤,不能直接new介面物件使用
//需要建立實現類的物件使用
MyInterfaceAbstrctlmpl impl=new MyInterfaceAbstrctlmpl();
impl.methodAbs1();
impl.methodAbs2();
impl.methidAbs3();
impl.methodAbs4();
}
}
在任何版本的Java中,介面都能定義抽象方法:
public abstract 返回值型別 方法名稱(引數列表)
注意事項:1.介面當中的抽象方法,修飾符必須時兩個固定的關鍵字:publicabstr
2.這兩個關鍵字修飾符,可以選擇性的省略。
定義一個介面名為MyInterfaceAbstract
public interface MyInterfaceAbstract {
public abstract void methodAbs1();//這是一個抽象方法,當我們省略public或者abstract或者都省略都不會出錯
public abstract void methodAbs2();
public abstract void methidAbs3();
public abstract void methodAbs4();
}
定義一個類來實現介面方法重寫
public class MyInterfaceAbstrctlmpl implements MyInterfaceAbstract{
@Override
public void methodAbs1() {
System.out.println("這是第一個方法");
}
@Override
public void methodAbs2() {
System.out.println("這是第二個方法");
}
@Override
public void methidAbs3() {
System.out.println("這是第三個方法");
}
@Override
public void methodAbs4() {
System.out.println("這是第四個方法");
}
}
執行結果:
這是第一個方法
這是第二個方法
這是第三個方法
這是第四個方法
介面靜態方法的使用
注意事項:不能通過介面名稱實現類的物件來呼叫介面當中的靜態方法。
正確用法:通過介面名稱直接使用其中的靜態方法。
格式:介面名稱.靜態方法名(引數);
靜態跟類有關係,所以不需要建立物件。
public class demo01 {
public static void main(String[] args) {
MyInterfaceStatic imp=new MyinterfaceImpl();//靜態跟類有關係所以不用建立物件。
//imp.methodStatic():錯誤寫法
MyInterfaceStatic.methodStatic();
}
}
從Java 8開始,介面當中允許定義靜態方法。
- 格式:public static 返回值 方法名稱(引數列表){
方法體
}
提示:就是將abstract或者default換成static即可
建立介面MyInterfaceStatic
public interface MyInterfaceStatic {
public static void methodStatic(){
System.out.println("這是一個靜態方法!");
}
}
建立一個實現類MyinterfaceImpl
public class MyinterfaceImpl implements MyInterfaceStatic{
}