2012-09-18 38 views
2

請讓我知道,如果這些訪問級別在Java中是可能的,如果沒有什麼辦法。是否有可能實現以下訪問級別

問題1:

From same class:    yes 
From subclass same package:  yes 
From any class same package: no 
From subclass outside package: no 
From any class outside package: no 

和 問題2:

From same class:    yes 
From subclass same package:  yes 
From any class same package: no 
From subclass outside package: yes 
From any class outside package: no 

訪問修飾符的無(公共/私有/默認/保護)提供上述組控制的。

對於如: 我有一個私有成員則只能在同一個類中訪問。如何爲我的第一個問題提供訪問控制?

+0

這是[標籤:家庭作業]?如果是這樣,那麼標記它是有利的。另外:你怎麼看,爲什麼? –

+0

不是作業。我已經進一步解釋了我的問題。 – John

回答

0

這應該擊穿幫助你決定答案。

From same class:     //private, default, protected, public 
From subclass same package:  //default, protected, public 
From any class same package:  //default, protected public 
From subclass outside package: //protected, public 
From any class outside package: //public 
+1

這是不正確的,在java保護有一個更廣泛的範圍作爲默認值。任何類相同的包是真實的受保護。 – atamanroman

+0

@atamanroman哎呀,我的壞..我是有點着急我猜..感謝你.. – PermGenError

+0

@ chaitanya10:我已經澄清我的問題。 – John

2

無java的範圍做適合你的要求

+0

是的。你是對的。那麼人們如何解決這個問題呢? – John

+0

他們通過從不在引用包中的其他任何地方引用這些變量來解決它。您可以控制包中的類,因此沒有必要擔心那裏的可訪問性限制。 –

0

不,這是不可能實現你想要的2個訪問級別要求。

有4只在Java中,公共,默認訪問級別,protected和private。它們中沒有一個匹配你正在尋找的東西。

1

在Java中可用的訪問說明符不符合你的要求。

沒有爲

From subclass same package:  
From subclass outside package:  
+0

假設是否需要這樣的訪問級別。有沒有解決方法? – John

+0

我不確定@John ...你希望你的課程能夠被分類和屬性可以在包裝內訪問嗎?爲什麼包裹在這裏非常重要?它只是一組類。 – SiB

0

沒有區分在不同包中的子類,不能給予不同的訪問級別。

唯一可能的解決辦法是重新構造包:-(

0

是的,這是可能的。但正如上面提到的,它不是簡單地使用默認的可訪問修飾符來實現的。你需要添加一個吸氣劑來控制訪問您的屬性或方法。

package house; 

public class Father { 
    private String secret = "I am your father"; 

    // for Q1 use default, for Q2 use protected 
    protected String getSecret() { 
     if(this.getClass().getName() != "house.Father") return secret; 
     else return "some talk about the weather..."; 
    } 
} 

此getter允許繼承訪問專門和私人屬性的直接訪問始終可用。但參考的訪問被拒絕。

相關問題