2016-06-14 26 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''メソッドをprotectedとしてマークしたので、同じパッケージ内のサブクラスとクラスに対してのみアクセスできます。 '' NewClassB''クラスは別のパッケージに入っているので、 '' x.a() ''を呼び出すことはできません。 – Kamil

+0

OKこの 'protected method'と私は抽象メソッドに対して同じことをしているかどうかを調べることができます。もし私が上書きすると私は上書きすることができます。この場合、パブリックと保護された@カミル –

答えて

1

abstractメソッドが定義された動作を持っていないものです。代わりに、抽象クラスの子のは、自身の動作を定義します。抽象メソッドはabstractクラスでのみ定義できますが、これはインスタンス化できません。たとえば、パッケージAで:どこかのパッケージB内で次に

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

、::

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

そして

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 –

関連する問題