2017-07-02 4 views
0

パッケージ内の私のメインメソッドは、すべてパブリックであるにもかかわらず、これは私のコードの例です。私のmainメソッドは、java内の別のパッケージ内のすべてのパブリックメソッドを見ることができません

package stuff.code; 
    public class AObject 
    { 
     public AObject(); 
     public AObject(String str); 
     public int getLength(); 
     public int getHeight(); 
    } 

    package stuff.code; 
    public class BObject extends AObject 
    { 
     public BObject(); 
     public BObject(String str); 
    } 

    package stuff.test; 
    import stuff.code.AObject; 
    import stuff.code.BObject; 
    public class tester 
    { 
     AObject a = new AObject(); //no red underline 
     AObject aa = new AObject("some string"); //no red underline 
     BObject b = new BObject(); //no red underline 
     BObject bb = new BObject("some string"); //tells me there is no such constructor 
     b.getLength(); //tells me I need a getLine method in BObject too 
    } 

私はsetAccessible(boolean型のフラグ)メソッドに見てきたが、私はそれのほとんどを理解していなかったと私はjava.lang.reflect.AccessibleObjectをインポートした後、それはまだ未定義でした。

これは私の実際のコードではありません。私はこれをあいまいにして、この問題にぶつかる他の多くの人にとって答えがより有用になるようにしたかったのです。私の方法はすべて体にコンクリートであるが、体は問題ではない。すべてが同じパッケージに入っていても、テスタークラスは別のパッケージになければなりません。

+1

これは実際のコードですか? bodyを持たないメソッドは、抽象クラスまたはインタフェースでのみ動作し、AObjectやBObjectのような通常のクラスでは動作しません。これらの問題のためにクラスがもはやコンパイルされていない可能性があります。また、テスターではまだクラスのearlerバージョンで作業していますか? –

+1

コンパイルされていない場合、どうすれば "うまく動作する"ことができますか? – c0der

+0

良い点。私はそれを変更しました –

答えて

0

BObjectコンストラクタの2回目の呼び出しでは、引数を渡していますが、そのクラスの宣言では引数をとりません。それを確認します。

+0

これは引数として文字列を受け取ります。 –

+0

これは引数を取るがコンストラクタをとらないメソッドです。コンストラクタは、デフォルトで最初のコンストラクタですが、BObjectメソッドとコンストラクタBObjectの両方に名前が付けられているため、最初のコンストラクタはコンストラクタであるとみなされ、引数をとらないので、推測しています。 – Hillux

+0

メソッドには戻り値の型が必要です。 BObject()は引数のないコンストラクタです。 BObject(String str)は1つの引数を持つ別のコンストラクタです。彼らは異なるパラメータを持っているので、彼らは同じ名前を持っていることは重要ではありません。これは、コンストラクタのオーバーロードと呼ばれます。 –

関連する問題