Hola:
Aunque es lo mismo que comenta Xerelo, lo explico de otra forma por si puede ayudar.
Scanner es una clase que tiene un constructor que acepta un InputStream como parámetro
http://docs.oracle.com/javase/7/docs...l/Scanner.html y System.in es justamente un Input Stream
http://docs.oracle.com/javase/7/docs...ng/System.html , así que no hay nada extraño en
Scanner variable=new Scanner(System.in)
simplemente estás haciendo un new de la clase Scanner pasándole un parámetro del mismo tipo que admite.
En cuanto a este tipo de encadenamiento
Texto=Texto.append(texto).reverse();
se puede hacer si append devuelve la misma clase, en vez de un resultado. Por ejemplo
Código Java:
Ver originalpublic class Acumulador {
private int acumulado=0;
public int getAcumulado() {
return acumulado;
}
public Acumulador acumula(int valor) {
acumulado+=valor;
return this; // este return es lo que permite encadenar metodos cuando se llama a acumula()
}
}
De esta forma, como el método acumula() devulve un Acumulador, puedes encadenar llamadas
Código Java:
Ver originalAcumulador acumulador = new Acumulador();
// Podriamos hacer llamadas de la forma habitual
acumulador.acumula(11);
// pero como acumula() devuelve un Acumulador, podemos llamar más métodos de Acumulador
int total = acumulador.acumula(12).acumula(14).acumula(1).getAcumulado();
Por supuesto, y como comenta Xerelo de forma más general, un método puede devolver cualquier tipo de objeto, no necesariamente un this, y así podrías llamar, de forma encadenada o no, a métodos de ese tipo de objeto distinto
variableClaseA.metodoDeA().metodoDeB().metodoDeC()
siempre que metodoDeA() devuelva un objeto de tipo B y metodoDeB() devuelva un objeto de tipo C.
Y aunque no va exactamente con la pregunta, simplemente comentar que esta llamada encadena de objetos de distintos tipos en general y salvo para casos muy concretos, no es buena costumbre de programación. La línea anterior
variableClaseA.metodoDeA().metodoDeB().metodoDeC()
hace que la clase a la que pertenece tenga que ver las clase A, B y C, además de tener que cambiarla si cambia cualquiera de los métodos. Siempre es aconsejable "ocultar" información y si variableClaseA.hazCosas() se encarga de llamar a metodoDeB() y metodoDeB() se encarga por dentro de llamar a metodoDeC(), tu código quedaría como
variableClaseA.hazCosas()
y solo necesita ver clase A y solo necesita cambiarse si cambia el método hazCosas().
Se bueno.