2013-08-18 41 views
0

我定義的類TestoMessaggi和一個名爲MessaggioJava錯誤:無法找到,即使.class文件都在

//esercizio 3.3 del libro 

import javax.swing.JOptionPane; 

public class TestoMessaggio { 
     private String code; 
     private String testo; 

     public TestoMessaggio(String c, String t) { 
       code = c; 
       testo = t; 
       } 

     public static TestoMessaggio creaTestoMessaggio() { 
       String co = JOptionPane.showInputDialog(null,"inserisci codice"); 
       String te = JOptionPane.showInputDialog(null,"inserisci testo"); 
       TestoMessaggio t1 = new TestoMessaggio(co,te); 
       return t1; 
       } 

     public String getCode() { 
       return code; 
       } 

     public String getTesto() { 
       return testo; 
       } 

     } 

這裏的子類相同的目錄符號Messaggio.class

public class Messaggio extends TestoMessaggio { 

    private String mittente; 
    private String destinatario; 

    public Messaggio(String c, String t,String m, String d) { 
      super(c,t); 
      mittente = m; 
      destinatario = d; 
      } 

    public String getDestinatario() { 
      return destinatario; 
      } 

    public String getMittente() { 
      return mittente; 
      } 

    public void setDestinatario(String d) { 
      destinatario = d; 
      } 

    public static void stampaMessaggio(Messaggio m) { 
      System.out.println("code : "+m.getCode()); 
      System.out.println("testo : "+m.getTesto()); 
      System.out.println("destinatario : " +m.getDestinatario()); 
      System.out.println("mittente : " +m.getMittente()); 
      } 

    } 

我創建了一個程序來測試這兩個類:這裏的代碼

//esercizio 3.5 del libro 

import javax.swing.JOptionPane; 


public class Esempio3_5 { 

     public static String leggiNumero() { 
       String num = JOptionPane.showInputDialog(null,"inserisci numero"); 
       return num; 
       } 

     public static void main(String[] args) { 

       String m = leggiNumero(); 
       TestoMessaggio t1 = creaTestoMessaggio(); // non trova il metodo 
       String d = leggiNumero(); 
       Messaggio mex = new Messaggio(null,null, m,d); 
       stampaMessaggio(mex); // nn trova il metodo 
       } 
     } 

當我嘗試編譯我得到這個錯誤ř

Esempio3_5.java:16: error: cannot find symbol 
    TestoMessaggio t1 = creaTestoMessaggio(); // non trova il metodo 
         ^
symbol: method creaTestoMessaggio() 
location: class Esempio3_5 
Esempio3_5.java:19: error: cannot find symbol 
    stampaMessaggio(mex); // nn trova il metodo 
    ^

符號:方法stampaMessaggio(Messaggio) 位置:類Esempio3_5

所有3個文件是在同一目錄中。有什麼建議麼?在此先感謝

回答

2

您需要訪問的類名的靜態方法:

TestoMessaggio t1 = TestoMessaggio.creaTestoMessaggio(); 

您所使用的代碼:

TestoMessaggio t1 = creaTestoMessaggio(); 

等同於:

TestoMessaggio t1 = Esempio3_5.creaTestoMessaggio(); 

因爲你是usin請參閱static上下文。現在,很明顯,您在Esempio3_5類中沒有該方法,因此失敗。


同樣,改變其他行:

Messaggio.stampaMessaggio(mex); 

但海事組織,你應該重寫toString方法Messaggio,而不是提供static stampaMessaggio()方法。

+0

以及我因子評分,我不應該使用,因爲()。這是一個靜態的方法...我錯了嗎? –

+0

@MickHardins。那麼,如果你正在調用同一個類的靜態方法,那麼你就不需要用類名來限定它。但是如果你正在調用其他類的靜態方法,那麼你必須使用限定名稱。 –

+0

好的感謝解釋它現在完美的作品! –

0

它沒有從其他類中獲取函數。試圖把它們使用點關聯opertaor像TestoMessaggio t1 = TestoMessaggio.creaTestoMessaggio();

0

你的錯誤說():

Esempio3_5.java:19: error: cannot find symbol 
    stampaMessaggio(mex); // nn trova il metodo 

我沒有看到一個stampaMessagio()方法Esempio3_5,而且也沒有編譯器。當你調用一個沒有類名或實例的方法之前,它會調用當前類/對象中的方法。

我假設你要調用在Messagio定義的靜態stampaMessagio(),所以你需要做的其實是:

Messaggio.stampaMessaggio(mex); // nn trova il metodo 
相關問題