2016-08-11 4 views
0

私が行っている練習では、3つのメソッドがあります。すべて値をテストし、trueまたはfalseを返すisEvenです。 1つのisEvenはインスタンスメソッドであり、他の2つはそれぞれ1つのパラメータを持つ静的メソッドです。新しいtestClassを作成し、mainメソッドでメソッドを実行すると、インスタンスisEvenメソッドは正常に動作しますが、静的isEvenメソッドを使用しようとすると、シンボルが見つかりません。しかし、実際のアプリケーションクラスでmainメソッドを作成して実行すると、オーバーロードされたメソッドが機能します。なぜこうなった?静的メソッドは別のクラスでも実行できませんか?使用される方法は以下のとおりです。オーバーロードされた静的メソッドは他のクラスで実行されていませんか?

public class MyInteger { 
    private int value; 
    public boolean isEven() { 
     if(this.value % 2 == 0) { 
      System.out.println(value + " is an even number."); 
      return true; 
     } 
     else { 
      System.out.println(value + " is not an even number."); 
      return false; 
     } 
    } 

    public static boolean isEven(int value) { 
     if(value % 2 == 0) { 
      System.out.println(value + " is an even number."); 
      return true; 
     } 
     else { 
      System.out.println(value + " is not an even number."); 
      return false; 
     } 
    } 

    public static boolean isEven(MyInteger value) { 
     if(value.value % 2 == 0) { 
      System.out.println(value.value + " is an even number."); 
      return true; 
     } 
     else { 
      System.out.println(value.value + " is not an even number."); 
      return false; 
     } 
    } 
} 
class testMyInteger { 
    public static void main(String[] args) { 
     MyInteger val1 = new MyInteger(2); 
     int val = 2; 
     System.out.println("The value of this object is " + val1.getValu()); 
     val1.isEven(); 
     val1.isOdd(); 
     val1.isPrime(); 
     isEven(val1); 
    } 
} 
+3

:ことはできませんなどのJavaの静的メソッドをオーバーロードは意味がありません... –

+0

あなたはスタックトレースを追加することはできますか? – Kode

+0

コードが動作していないときのコードの表示方法を教えてください(メインとは別のクラスに静的メソッドを持つ)。今のところ、コードは動作しているので、デバッグするのは難しいです。 –

答えて

1

のは、あなたのコードを見てみましょう:

public static void main(String[] args) { 
    MyInteger val1 = new MyInteger(2); 
    int val = 2; 
    System.out.println("The value of this object is " + val1.getValu()); 
    val1.isEven(); 
    val1.isOdd(); 
    val1.isPrime(); 
    isEven(val1); // <-- here is the problem. 
} 

static方法は自由な方法のようではありません。それでもクラスを使用して、またはそのクラスのインスタンスを通じてそれらを呼び出す必要があります。

例えば:ヒントと同じように

public static void main(String[] args) { 
    MyInteger val1 = new MyInteger(2); 
    int val = 2; 

    MyInteger.isEven(val1); 
    val1.isEven(val1); 

    MyInteger.isEven(val); 
    val1.isEven(val); 
} 
+0

はいこれが有効です。どうもありがとうございました。これは、メインメソッドがMyIntegerクラスの下にあった場合にisEven静的メソッドがちょうどisEvenで機能する理由を説明しています。 – Artie

0

ここにはいくつかの問題があります。彼らは、コメントで説明しているが、私はそれらをここにリストアップします:

  • は私が
  • あなたのmain()メソッドはである(これを書いている時点で)ポストでコンストラクタが表示されません同じJavaファイルですが、同じクラスではありません。彼らは2つの非常に異なるものです。

    public class MyInteger { 
        // Not included in post 
        private int value; 
        // Not included in post 
        public MyInteger(int i) { 
         value = i; 
        } 
    
        public boolean isEven() { 
         if (this.value % 2 == 0) { 
          System.out.println(value + " is an even number."); 
          return true; 
         } else { 
          System.out.println(value + " is not an even number."); 
          return false; 
         } 
        } 
    
        public static boolean isEven(int value) { 
         if (value % 2 == 0) { 
          System.out.println(value + " is an even number."); 
          return true; 
         } else { 
          System.out.println(value + " is not an even number."); 
          return false; 
         } 
        } 
    
        public static boolean isEven(MyInteger value) { 
         if (value.value % 2 == 0) { 
          System.out.println(value.value + " is an even number."); 
          return true; 
         } else { 
          System.out.println(value.value + " is not an even number."); 
          return false; 
         } 
        } 
    
    } 
    
    class testMyInteger { 
        public static void main(String[] args) { 
         MyInteger val1 = new MyInteger(2); 
         int val = 2; 
         //System.out.println("The value of this object is " + val1.getValue()); // mispelled here, Not declared anyways 
         val1.isEven(); 
         // these are not declared 
         //val1.isOdd(); 
         //val1.isPrime(); 
    
         // Not inside of the 'MyInteger class, therefor not able to be called without static reference of MyInteger.isEvent 
         //isEven(val1); 
         MyInteger(val1); 
        } 
    } 
    
+1

これは良いコメントですが、不十分な回答です。 – GhostCat

+0

@GhostCatそれは良いですか? –

+0

私はこの練習で何かを上書きしているとは思わない。 3つのisEvenメソッドはすべて1つのクラス(MyInteger)に書き込んでいます。次に、それらをtestAppクラスでのみ実行しています。 – Artie

関連する問題