簡體   English   中英

接口變量默認為final和static,方法是public和abstract

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM