2013-08-18 39 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 
相关问题