Java-抽象類和介面
阿新 • • 發佈:2019-01-22
抽象類
- 抽象類中既有方法的實現和抽象的方法。有一個或多個抽象方法的類必須宣告為抽象類,沒有抽象方法的類也可以宣告為抽象類。
- 抽象方法訪問修飾符為
public
,protected
,default(什麼也不寫)
。 - 抽象類不能例項化。如果將一個類宣告為
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!