Override

Eu estava futucando aqui aí fiz o seguinte

superclasse

  public void escrever()
   {
    System.out.println( "Metodo escrever " + getClass() );
   }

subclasse

  public String escrever()
   {
    return "Metodo escrever2 " + getClass();    
   }

Ele da erro. Mas se eu faço isso na subclasse:

  public int escrever( int x )
   {
    System.out.println( "Metodo escrever2 " + getClass() );
    return 1;    
   } 

Ele funciona. Por que isso ? A assinatura do método, (me digam se estiver errado), não seria o seu [tipo de acesso][tipo de retorno] nome( parametros), ou sua assinatura seria somente os seus parametros fazendo com isso que não se possa alterar o método. Mas isso também não seria um overload ? Por que a subclasse já teria o método, herdado da superclasse, e com esse novo método com tipo de retorno String ele seria outro método.

Não entendi e me desculpem pelo post grande.

Obrigado.

nos dois primeiros casos você estava fazendo um overriding, e nos overriding o retorno deve ser IGUAL.

no segundo caso quando vc colocou um parâmetro, você não está mais fazendo um overriding e sim um overload, pois a assinatura do método esta diferente, devio a subclasse ter um parametro

E como eu faria pra ter um método em minha subclasse que fosse mais ou menos assim

public String escrever() ?

A assinatura do método só é compreendida pelos parâmetros dele é ?
Eu não posso ter uma sobrecarga de métodos com o mesmo nome não ?
Tentei colocar a linha acima na minha superclasse e também não pude.

A assinatura do método é nome do método + tipo dos parâmetros.
Você realmente não pode ter esse método.

cara, override é quando voce declara numa classe filha um metodo extamente igual ao pai (tem algumas reglas) mas no seu caso deve ser iguais…

no overload, que é a troca de parametros, voce pode trocar o retorno se quizer.

se o q vc quer desse pra fazer, como o java ia saber qual chamar nesse caso:

// tenho 2 metods getAlgumaCoisa, um retorno String o outro um Interger
public static void main(String[] args) {
    Object o = getAlgumaCoisa();
}

[quote=“JBoy__”]E como eu faria pra ter um método em minha subclasse que fosse mais ou menos assim

public String escrever() ?

A assinatura do método só é compreendida pelos parâmetros dele é ?
Eu não posso ter uma sobrecarga de métodos com o mesmo nome não ?
Tentei colocar a linha acima na minha superclasse e também não pude.[/quote]

Ou você muda o nome do método (na minha opinião, nesse caso seria o mais lógico) ou coloca algum argumento nele.

Para fazer override (sobrescrita), o nome do método, os argumentos e o tipo de retorno DEVEM ser iguais.

Já em overload (sobrecarga), o tipo de um argumento ou a quantidade de argumentos DEVE ser diferente, o retorno não faz diferença neste caso.

Leia sobre métodos, override e overload nesta página do tutorial da Sun:
http://java.sun.com/docs/books/tutorial/java/javaOO/methoddecl.html