Hola Luis M.
Creo que te ha faltado implementar un método en la clase CadenaBinaria para mostrar el resultado de concatenar sus atributos.
Paso a poner aquí mi propuesta de resolución del ejercicio:
Clase Cadenas
public class Cadenas implements Cloneable{
private static final String CEROS="000000000000";
private static final String UNOS="111111111111";
private String cadena1, cadena2, cadena3, cadena4;
public Cadenas(String cadena1, String cadena2, String cadena3, String cadena4){
this.cadena1=CEROS;
this.cadena2=CEROS;
this.cadena3=CEROS;
this.cadena4=CEROS;
}
public String cambiarCadena(String cadena){
if (cadena.equals(CEROS)){return UNOS;}else{return CEROS;}
}
public void cambiarCampo(int numeroDeCampo){
switch(numeroDeCampo){
case 1: this.cadena1=cambiarCadena(cadena1); break;
case 2: this.cadena2=cambiarCadena(cadena2); break;
case 3: this.cadena3=cambiarCadena(cadena3); break;
case 4: this.cadena4=cambiarCadena(cadena4); break;
default: break;
}
}
public void imprimirCadenas(){
System.out.println(cadena1+cadena2+cadena3+cadena4);
}
@Override
public Cadenas clone(){
Cadenas clon = new Cadenas(this.cadena1, this.cadena2, this.cadena3, this.cadena4);
return clon;
}
}
Clase con método main
public class CU00912C {
public static void main(String[] args) {
Cadenas objeto= new Cadenas("000000000000","000000000000","000000000000","000000000000");
Cadenas copia1=objeto.clone();
Cadenas copia2=objeto.clone();
Cadenas copia3=objeto.clone();
Cadenas copia4=objeto.clone();
copia1.cambiarCampo(1);
copia2.cambiarCampo(2);
copia3.cambiarCampo(3);
copia4.cambiarCampo(4);
System.out.print("original: ");
objeto.imprimirCadenas();
System.out.print("copia1: ");
copia1.imprimirCadenas();
System.out.print("copia2: ");
copia2.imprimirCadenas();
System.out.print("copia3: ");
copia3.imprimirCadenas();
System.out.print("copia4: ");
copia4.imprimirCadenas();
}
}
Me gustaría que alguien me comentase cómo hacerlo de forma más eficiente y elegante.
Un saludo.