1. 程式人生 > >Java-抽象類和介面

Java-抽象類和介面

抽象類

  • 抽象類中既有方法的實現和抽象的方法。有一個或多個抽象方法的類必須宣告為抽象類,沒有抽象方法的類也可以宣告為抽象類。
  • 抽象方法訪問修飾符為publicprotecteddefault(什麼也不寫)
  • 抽象類不能例項化。如果將一個類宣告為abstract,就不能建立這個類的物件;但是可以定義一個抽象類的物件變數,它只能引用非抽象子類的物件。
  • 抽象類中可以有例項域和構造方法。
  • 子類使用extends 來繼承抽象類,如果子類不是抽象類的話,那麼需要提供抽象類所有抽象方法的實現。
abstract class B{
    private String s;//抽象類可以有例項域
    public
B(String s){//抽象類可以有構造方法 this.s=s; } public String getS(){ return s; } public abstract String getDescription(); } public class Outer { public static void main(String args[]){ B b=new B("Hello World!"){ //建立匿名內部類,並實現getDescription方法 public String getDescription
(){ //在實現的時候不用在寫abstract關鍵字 return "implement getDescription methon!"; } }; System.out.println(b.getS()); System.out.println(b.getDescription()); } }

輸出結果

Hello World!
implement getDescription methon!

介面

  • 介面中只有方法的宣告,但是沒有方法的實現,也可以沒有任何方法。
  • 介面中的方法自動為public
    。因此,在介面中宣告方法時,不必提供關鍵字public
  • 介面中可以有常量,介面中的域被自動設為public static final
  • 介面不能有構造方法,並且不能構造介面物件,但是宣告介面變數。
  • 子類通過implements 來實現介面,該子類需要提供所有方法的實現。
interface B{ //定義介面
     String getDescription(); //等價於public abstract String getDescription();
}
class BImpl implements B{ //實現B介面

    private String s;
    public BImpl(String s){
        this.s=s;
    }

    @Override
    public String getDescription() {
        return s+",i implement getDescription methon of interface B!";
    }
}
public class Outer {
    public static void main(String args[]){
        B b=new B(){    //建立匿名內部類並實現介面B中的getDescription方法
            private String s="Hello";
            public String getDescription(){ //在實現的時候不用在寫abstract關鍵字
                return s+",i implement getDescription methon of interface B!";
            }
        };
        System.out.println(b.getDescription());
        B b1=new BImpl("Hello World");
        System.out.println(b1.getDescription());
    }
}

輸出結果

Hello,i implement getDescription methon of interface B!
Hello World,i implement getDescription methon of interface B!