[英]interface variables are final and static by default and methods are public and abstract
問題是為什么在默認情況下決定將變量作為final和static以及方法作為public和abstract。
是否有任何特殊原因使它們成為隱式,變量為final和static,方法為public和abstract。
為什么他們不允許靜態方法但允許靜態變量?
我們在Java中具有多重繼承功能的接口,以避免鑽石問題。 但它如何解決鑽石問題,因為它不允許靜態方法。
在下面的程序中,兩個接口都有相同名稱的方法..但實現只有一個我們實現...這是鑽石問題的解決方法嗎?
interface testInt {
int m = 0;
void testMethod();
}
interface testInt1 {
int m = 10;
void testMethod();
}
public class interfaceCheck implements testInt, testInt1{
public void testMethod() {
System . out . println ( "m is"+ testInt.m );
System . out . println ( "Hi World!" );
}
}
在我看來,一個接口聲明了一組實現者必須具備的能力。 它指的是“什么”而不是“如何”; 它更像是一個規范,而不是一個實現指南。
因此,非公開的方法在接口中是無關緊要的。 與非靜態數據成員相同,后者與特定實現更相關。
至於為什么它們是默認值 - 它只是語言規范。 他們設計的就是這樣。
它們不允許接口中的靜態方法,因為接口不具有任何功能。 這只是界面的定義。
Java沒有菱形問題,因為接口不包含代碼。 如果允許你的接口有代碼,那么Java將無法確定它是否應該調用testInt的testMethod()或testInt1的testMethod()。 由於接口沒有代碼,Java知道testMethod只有一個實現,它需要運行代碼。
我認為接口中不允許使用非靜態變量,主要是出於語用原因。 通過這種方式可以更有效地進行多重繼承,並避免了一些歧義問題。
顧名思義,接口只是實例上可用操作的定義,因此,它不包含任何方法實現。
由於這些原因,允許方法不公開,變量不是靜態的,這沒有任何意義。
也就是說,我不確定接口的默認值是什么,而不是類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.