2016-04-12 5 views
0

を達成するためのキーワードを拡張して、私は、2つのクラス次があります: Test.javaのJava:私が使用したときに異なるパッケージの別のクラスにアクセスしない保護された方法は、多重継承

package com.test.app; 

public class Test { 

    public int a=10; 
    protected void testFunc() { 
     // TODO Auto-generated method stub 
     System.out.println("Test class--> testFunc"); 
    } 
} 

もう一つは Main.java パッケージですcom.test.main;型テストから

import com.test.app.Test; 


public class Main extends Test { 


    public static void main(String[] argv) { 

     System.out.println("Main Method"); 

     Main main =new Main(); 
     main.testFunc(); // No Error 


     Test test = new Test(); 
     test.testFunc(); // Error 

    } 

} 

方法test.testFuncは()Test#testFunc()方法は(Mainのような)サブクラスのと同じパッケージ(com.test.app)のクラスに対してのみアクセス可能である

+0

質問は何ですか? –

+2

はい、それはパッケージの仕組みです。 – duffymo

+0

これは機能です...バグではありません... – pikrut

答えて

1

見えません。

MainTestのサブクラスであり、testFunc()を呼び出すことが許されているため)これはなぜ声明

main.testFunc(); 

は罰金コンパイルされます。 Mainクラスが配置されているパッケージはcom.test.appが、com.test.mainではないので


この文は、しかし

test.testFunc(); 

、コンパイルされません。

さらに詳しい情報:

+0

[これは、特に受理された回答の上のコメント](http://stackoverflow.com/a/215505/2988942)あなたの答えに良い参照/証拠の追加です:) – Phantomazi

+0

はい私はあなたの答えに同意しますが、ここに私質問は私がスーパークラスから拡張しているので、この場合保護されたメソッドは別のパッケージで利用できるはずですか? –

+0

はい、正しいです。 –

関連する問題