Java9新特性之——接口中的私有方法
前言:Java9的發佈一推再推,下面就讓我們一起來看看Java9有哪些新特性吧!
- Java7中的接口
- Java8中的接口
- Java9中的接口
- 在接口中定義私有方法
- 爲什麼我們需要在接口中使用私有方法
Java7中的接口
在Java SE 7或更早版本中,一個接口中只能只能定義如下兩種:
- 常量
- 抽象方法
我們不能在接口中提供方法實現。如果我們要提供抽象方法和非抽象方法(方法與實現)的組合,那麼我們就得使用抽象類。
例如:
public interface JavaSeven{
String TYPE_NAME = "java seven interface";
int TYPE_AGE = 20;
String TYPE_DES = "java seven interface description";
void method01();
void method02(String arg);
void method03(String arg1,int arg2);
String method04();
}
這裏我們定義了一些常量和公共抽象方法。如果我們想在這裏提供這些方法的實現,如何解決這個問題呢?我們應該使用抽象類來解決Java SE 7中的上述情況。
Java8中的接口
在Java SE 8 Release中Java接口引入了一些新功能——默認方法和靜態方法。我們可以在Java SE 8的接口中編寫方法實現,僅僅需要使用“default”關鍵字來定義它們。
在Java SE 8中,一個接口中能定義如下幾種:
- 常量
- 抽象方法
- 默認方法
- 靜態方法
例如:
public interface JavaEight{
String TYPE_NAME = "java seven interface";
int TYPE_AGE = 20;
String TYPE_DES = "java seven interface description";
default void method01(String msg){
//TODO
}
default void method02(){
//TODO
}
// Any other abstract methods
void method03();
void method04(String arg);
...
String method05();
}
這裏我們爲所有方法提供了實現。如果我們觀察上面的代碼,我們覺得有些代碼冗餘。如果要將冗餘代碼提取爲常用方法,那應該使用公共方法。但是,如果API開發人員不想向客戶端公開任何其他方法。我們如何解決這個問題?我們應該使用抽象類來解決Java SE 8中的上述情況。
Java9中的接口
爲了解決上述的問題Java9提供了新的功能——在接口中使用private私有方法。我們可以使用’private’訪問修飾符在接口中編寫私有方法。
在Java SE 8中,一個接口中能定義如下幾種:
- 常量
- 抽象方法
- 默認方法
- 靜態方法
- 私有方法
- 私有靜態方法
例如:
public interface JavaNine{
String TYPE_NAME = "java seven interface";
int TYPE_AGE = 20;
String TYPE_DES = "java seven interface description";
default void method01(){
//TODO
}
default void method02(String message){
//TODO
}
private void method(){
//TODO
}
// Any other abstract methods
void method03();
void method04(String arg);
...
String method05();
}
在這裏,我們將冗餘代碼提取到通用的私有方法中,以便我們的API客戶端無法看到它們。
在接口中定義私有方法
在Interface中編寫私有方法時,我們應該遵循以下規則:
- 我們應該使用私有修飾符(private)來定義這些方法。
- 我們不能同時使用私有修飾符(private)和abstract來定義這些方法。
- “私有”方法意味着完全實現的方法,因爲子類不能繼承並覆蓋此方法。
- “抽象”方法意味着無實現方法。這裏子類應該繼承並覆蓋此方法。
- 私有方法必須包含方法體,必須是具體方法。
- 這些接口私有方法僅在該接口內是有用的或可訪問的。我們無法從接口訪問或繼承私有方法到另一個接口或類。
**總結:**Java9爲我們提供的新功能——在接口中定義私有方法,對我們有很大的幫助,這將減少重複代碼,提高代碼的重用性,同時將私有方法寫在接口中,不讓子類看到,有很好的安全性。