2016-08-11 4 views
0

Für eine Übung, die ich mache, habe ich drei Methoden, alles isEven testet einen Wert und gibt wahr oder falsch zurück. One isEven ist eine Instanzmethode und die anderen beiden sind statische Methoden mit jeweils einem Parameter. Wenn ich eine neue testClass mache und die Methoden in der main-Methode ausführe, funktioniert die instance isEven-Methode einwandfrei. Wenn ich jedoch versuche, die statischen isEven-Methoden zu verwenden, erhalte ich den Fehler symbol not found. Wenn ich jedoch die Hauptmethode in der tatsächlichen App-Klasse erzeuge und sie dort ausführe, funktionieren die überladenen Methoden. Warum passiert dies? Sollten die statischen Methoden nicht in einer anderen Klasse ausgeführt werden können? Die verwendeten Methoden sind unten.Überladene statische Methoden, die nicht in anderen Klassen ausgeführt werden?

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

nur als Hinweis: Überlastung statische Methoden in Java macht so keinen Sinn nicht möglich ist ... –

+0

Können Sie einen Stacktrace hinzufügen? – Kode

+0

sollten Sie uns zeigen, wie Ihr Code aussieht, wenn er nicht funktioniert (mit der statischen Methode in einer separaten Klasse von der Hauptversion). Denn im Moment zeigen Sie uns nur Code, der funktioniert, sodass das Debuggen schwieriger ist. –

Antwort

1

die auf den Code schauen lassen:

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 Methoden nicht frei Methoden mögen werden. Sie müssen sie immer noch mit einer Klasse oder über eine Instanz dieser Klasse aufrufen.

Z. B .:

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

Ja, das hat funktioniert. Vielen Dank. Das erklärt auch, warum die statische isEven-Methode nur mit isEven funktioniert, wenn die Hauptmethode der MyInteger-Klasse angehört. – Artie

0

Sie haben hier ein paar Probleme. Sie sind in den Kommentaren erklärt, aber ich werde sie hier aufzählen:

  • Ich habe keinen Konstruktor in der Post sehen (zum Zeitpunkt des Schreibens dieser)
  • Ihre Methode main() ist in die gleiche Java-Datei, aber nicht die gleiche Klasse. Sie sind zwei sehr unterschiedliche Dinge.

    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

Das ist ein guter Kommentar, aber eine unzureichende Antwort. – GhostCat

+0

@GhostCat Das besser? –

+0

Ich glaube nicht, dass ich irgendetwas in dieser Übung außer Kraft setze. Alle drei isEven-Methoden schreiben in einer Klasse (MyInteger), dann führe ich sie nur in einer testApp-Klasse aus. – Artie

Verwandte Themen