Gostaria de saber por que este código não compila.
Moto.java
package com.paulopatto.mundo.maquinas.veiculos;
abstract class Moto{String id = "XXXX-XXXX-XXXX-XXXX";}
Honda.java
package com.paulopatto.mundo.maquinas.veiculos;
public class Honda extends Moto{
public static void main(String[] args){System.out.println("Honda Motos");}
}
Porem se eu compilo da seguinte forma:
javac Moto.java
javac Honda.java
Me dá a seguinte saida na console do Windows
Honda.java:5: cannot find symbol
symbol: class Moto
public class Honda extends Moto{
^
1 error
Agora se eu compilo com javac *.java vai sem problemas. Existe explicação para tal? Nunca pensei que ia ter problema com exercicios básicos de JAVA.
PS.:Pode se retirar o membroString id = "..." que continua não funcionando. Será que classes que herdam abstrações, só podem ser compiladas juntas? Por favor respostas coeerentes e com o por que, não me venham com, essa de é se funciona com javac *.java usa isso. Quero saber o por que disso.
Um detalhe nesta classe que compila com o javac *.java quando executamos o java Honda ele dá a seguinte exceção.
C:\Documents and Settings\Murilo\Meus documentos\Programacao\Testes de Java\com\paulopatto\mundo\maq
uinas\veiculos>java Honda
Exception in thread "main" java.lang.NoClassDefFoundError: Honda (wrong name: com/paulopatto/mundo/m
aquinas/veiculos/Honda)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Cara duas coisa, uma é que continua não funcionando danado a seguinte saída java -cp . com.paulopatto.mundo.maquinas.veiculos.Honda.
E a outra é por que o uso do -cp?
“-cp .” é a mesma coisa que “-classpath .” ou seja, ele acerta o classpath para direcionar para o diretório corrente.
Aham - não vi que você executou seu programa a partir do diretório “C:\Documents and Settings\Murilo\Meus documentos\Programacao\Testes de Java\com\paulopatto\mundo\maquinas\veiculos”; você deveria ter executado seu programa a partir do diretório “C:\Documents and Settings\Murilo\Meus documentos\Programacao\Testes de Java”.
Já testei com public e não foi, e pelo que sei com visibilidade DEFAULT, por estarem no mesmo pacote deveria ir sem problemas e outra, se as duas são compiladas juntas nas mesma chamada vai, deve ter outra coisa aí.