De partida no es lo mismo agregar un nombre a un Thread que una variable identificadora o un contador o un valor booleano, etc... si vas a responder mi ultima pregunta te lo agradecere, pero lo que dices no tiene absolutamente nada que ver, y el codigo que pusiste si suelta error en tiempo de ejecucion por que no existe tal variable en la clase Thread, aunke pensandolo nisikiera es necesario hacer ese cast... y no me mandes a leer tutoriales por algo tan basico como pasar un argumento a la superclase, si no viste estoi preguntando otra cosa...
Saludos
Vamos a ver, porque no estamos confundiendo. Si pongo este código en vez del anterior (el cual también compila y funciona perfectamente):
public class HiloSumador extends Thread {
private String identificador;
private int cantidad;
public HiloSumador(String id) {
super(id);
identificador = id;
cantidad = 0;
}
public void run() {
for (int i = 0; i < 20; i++)
cantidad++;
System.out.println("La suma es: " + cantidad);
System.out.println(identificador);
System.out.println(getName());
}
public static void main(String[] args) {
Thread hilo1 = new HiloSumador("Hilo1");
hilo1.start();
}
}
La salida por pantalla es:
Así que es lo mismo ponerle el nombre, que añadir una variable llamada "identificador" para llamar al hilo de alguna forma. ¿Qué no existe la variable y suelta error en tiempo de ejecución? Te vuelvo a decir que mires más cosas de Java, ¿como no va a existir una variable que te declaras como atributo de tu clase? Existen las dos, identificador y cantidad, porque las he declarado. Aunque haya herencia, yo estoy añadiendo los atributos que yo necesito para que mi hilo funcione. Así que no entiendo de donde te has sacado que falla en tiempo de ejecución por un lado, y que no existe esa variable por otro.
No se a que te refieres con eso de cast, si te refieres a "casting" yo no veo ninguno en el código así que...será otra cosa a lo que te refieres.
Por último ya te he respondido a tu pregunta:
Heredando en runnable de Thread e implementando Runnable, hay otra forma?
Se puede hacer como te he mostrado en este código y en el anterior (que es la misma forma). No tiene sentido (y que me corrijan por favor si me equivoco alguien que lea esto) heredar de Thread, e implementar la interfaz Runnable, ya que si te vas y miras un poco la documentación de Thread:
http://download.oracle.com/javase/6/docs/api/java/lang/Thread.html verás que pone "All implemented interfaces: Runnable".
Siendo más sencillo, a tu pregunta respondo: Sí, se puede hacer de dos formas. Heredando de Thread e implmentando el método run(). O implementando la interfaz Runnable e implementando el método Run.
Saludos