Como Thread implementa Runnable, você continua implementando um Runnable.
Entretanto, sobrescrever Thread não é considerada uma boa prática. O ideal é implementar a interface Runnable diretamente.
Dica. Sempre que sobrescrever um método, de qualquer classe, coloque a anotação @Override em cima desse método. Assim, se vc cometer um erro de grafia (como ocorreu nesse seu código), o compilador vai saber que sua intenção era sobrescrever alguma coisa, e vai te avisar que o método em questão não sobrescreve nada.
[code]//Esse código agora dá erro, pois o compilador sabe que a intenção era
//sobrescrever run() e não criar um novo método chamado rum().
class MyThread1 extends Thread { @Override
void rum() {
System.out.println("nome da Thread dada pela JVM:" + Thread.currentThread().getName());
for(int i = 0; i < 5; i++) {
System.out.println("Executando minha primeira Thread.");
}
}
public static void main(String[] args) {
MyThread1 mt = new MyThread1();
mt.start();
}
}[/code]
Isso é ainda mais útil quando você estiver sobrescrevendo suas próprias interfaces e classes. Assim, se você alterar o nome de um método na classe pai, o compilador automaticamente dará erro em todas as classes filhas onde você esquecer de alterar o nome do método também.
[quote=ViniGodoy]Como Thread implementa Runnable, você continua implementando um Runnable.
Entretanto, sobrescrever Thread não é considerada uma boa prática. O ideal é implementar a interface Runnable diretamente.
Dica. Sempre que sobrescrever um método, de qualquer classe, coloque a anotação @Override em cima desse método. Assim, se vc cometer um erro de grafia (como ocorreu nesse seu código), o compilador vai saber que sua intenção era sobrescrever alguma coisa, e vai te avisar que o método em questão não sobrescreve nada.
[code]//Esse código agora dá erro, pois o compilador sabe que a intenção era
//sobrescrever run() e não criar um novo método chamado rum().
class MyThread1 extends Thread { @Override
void rum() {
System.out.println("nome da Thread dada pela JVM:" + Thread.currentThread().getName());
for(int i = 0; i < 5; i++) {
System.out.println("Executando minha primeira Thread.");
}
}
public static void main(String[] args) {
MyThread1 mt = new MyThread1();
mt.start();
}
}[/code]
Isso é ainda mais útil quando você estiver sobrescrevendo suas próprias interfaces e classes. Assim, se você alterar o nome de um método na classe pai, o compilador automaticamente dará erro em todas as classes filhas onde você esquecer de alterar o nome do método também.[/quote]
Valeu vini, eu ja tinha visto esse @override mas não sabia pra que servia.
Agora eu estava vendo no livro da katy realmente é melhor implementar runable.
Mesmo eu corrigindo o metodo run(), ainda ocorre o erro de que eu não implementei runnable. Segue a minha pergunta novamente, "eu posso executar uma thread sem criar um objeto runnable nesse caso, ou sem implementar Runnable, extendendo apenas Thread??
A classe Thread implementa Runnable. Isso responde sua pergunta?[/quote]
Veja bem Brrodo, li no livro da katy e o que entendi: Para executar, startar, enfim, uma Thread, temos que ter um objeto Runnable(trabalho) e um objeto Thread (trabalhador). Uma Thread necessita de ambos para existir uma nova pilha de métodos. Para criar um OBJETO Thread podemos exetender Thread (não aconselhavel) ou implementar Runnable. Agora a respota para a minha pergunta: 'Para executar uma Thread ou, criar uma nova pilha de métodos, é necessário de pelomenos um objeto THread e um Objeto Runnable."
OBS: Como Runnable é uma interface com o método run();, precisamos sobrescreve-lo, lembre-se: Sobrescrever o método run() de Runnable, pois se extendermos a classe Thread que possui um método run() ja sobrescrito da interface Runnable, ele será executado na pilha normalmente e não será criada uma nova pilha.
Pessoal, se eu escrevi alguma besteira me corrijam por favor, pois foi isso que entendi até o momento, as vezes eu não soube compriender na respostas anteriores dos nossos amigos.
Teríamos erro de compilação caso o problema fosse o modificador de acesso do método “run()” estar em “default” e não “public” e não o erro de que eu “não foi implementado runnable”.