2016-06-14 18 views
0

我是Java編程的初學者,所以我無法測試protected abstract method的範圍。JAVA:我如何檢查「受保護的抽象方法」的範圍?

要檢查protected method我測試此代碼:

package A; 
public class NewClassA { 
protected String a(){ return "a"; } 
} 

// Main 
NewClassA a = new NewClassA(); 
String str = a.a(); // works fine 

//New Package 
package B; 
import A.NewClassA; 
public class NewClassB { 
    NewClassA x = new NewClassA(); 
    String str = x.a(); // Error convert to a() to public 
} 
+0

什麼你的意思做 「檢查受保護的抽象方法的範圍」?正如我在代碼中看到的那樣,一切都按照它的原理工作。您將''NewClassA :: a''方法標記爲受保護的,因此只能在同一個包中使用它的子類和類。 'NewClassB'類是不同的包,所以它不能調用''x.a()''。 – Kamil

+0

好吧這受保護的方法,我可以檢查,如果我做同樣的抽象方法,它會迫使我重寫方法,如果我重寫我可以在新的包中讀取沒有例外,所以在這種情況下,他們沒有區別公共和保護@Kamil –

回答

1

一種abstract方法是一種不具有確定的行爲。相反,抽象類的子女本身定義了它的行爲。抽象方法只能在abstract類中定義,該類不能實例化。例如,在套餐A:

package A; 
public abstract class NewClassA { 
    protected abstract String getString(); 
} 

和:

package A; 
public class NewClassB extends NewClassA { 
    @Override 
    protected String getString() { //Must be overridden by non-abstract child 
     return "B"; 
    } 
} 

然後,程序包B中的某處:

package B; 
import A.*; 
public class ProtectChecker { 
    NewClassA x = new NewClassA(); //Cannot instantiate abstract NewClassA 
    NewClassA y = new NewClassB(); //OK 

    String str = y.getString(); //Error convert to getString() to public 
} 
+0

是的這是一個很好的答案謝謝鋯石:D –