接口中的屬性 默認是 public static final類型 就算你不加 默認也是存在
方法默認都是public abstract類型 不加默認也存在
比如
interface K
{
String abc="sdfd";
void add() throws Exception;
}
實際上編譯時 是這樣
interface K
{
Public static final String abc="sdfd";
public abstract void add() throws Exception;
}
爲什麼屬性是static
因爲 接口不能實例化,非靜態變量必須是實例化的對象或則有方法體的方法可以可以調用 所以不是靜態就沒有意義了
爲什麼必須是 public
因爲接口本來就是一種約束 定義抽象方法 就是約束子類必須去實現 必須是public 否則訪問不到
屬性不定義成public 外界訪問不到 同樣沒有意義了
爲什麼方法是abastract
因爲帶有abstract 關鍵字的方法,子類才必須實現 所以帶有abstract關鍵字的方法
不能帶有final abstract 是子類必須繼承 final 是該方法不能被重寫 所以會產生衝突
比如
interface K
{
Public String abc="sdfd";
public void add() throws Exception;
}
public class H implements K{
public String abc="";
public final void add() {
System.out.println(K.abc);
}
public static void main(String[] args) {
H h=new H();
h.add();
}
}
子類實現接口時基本的結構必須與接口一致,你不能再方法上添加如 static修飾符
不得將 public 修飾符改成private 但是你可以加上修飾符 final 表示子類的子類不能重寫該方法
其實繼承接口實現方法 與 繼承類 重寫方法 的語法是一致的
接口可以繼承接口.抽象類可以實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數(這句話有點問題 看下面例子 V類並沒有明確的構造函數 只有默認的構造函數).
class V implements IV{
public void add()
{
System.out.println("add");
}
}
interface IV
{
public void add();
}
interface IV1
{
public void add();
}
public abstract class 抽象類繼承 extends V implements IV,IV1 {
public void add() {
// TODO Auto-generated method stub
super.add();
}
}
抽象類 與接口的區別
1接口內只能是功能的定義,抽象類中可以包括功能的定義和功能的實現。
2. 抽象類是用來extends的,而繼承有一定的侷限性,只能繼承一個類
而接口就不同,可以同時實現多個接口
3 接口字段定義默認爲public static final,而抽象類的則默認爲friendly。