Erro com classe Abstrata, não compila

Pessoa bom dia.

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 membro String 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)

Use


java -cp . com.paulopatto.mundo.maquinas.veiculos.Honda

para executar sua classe Honda.

Thingol, boa noite.

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”.

Opa, funciono, valeu Thongol, mas ainda não entendo por que se as classes compiladas separadamente ele dá erro.

nao falta um public na classe Moto nao? :idea:

Acredito que do jeito que está, a classe Honda nao enxerga a classe Moto.

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í.