121
Aprender a programar desde cero / Re:(CU00639B)
« en: 29 de Septiembre 2014, 21:10 »
Lo veo todo correcto! Puedes continuar avanzando Alex.
Saludos!
Saludos!
Aprende a programar desde cero con el libro "Aprender a programar. Algoritmos y fundamentos de programación orientados a la ingeniería y ciencias". 748 pgs. Editorial aprenderaprogramar.com.
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
if (nombre.equals("Barney")) {
list.remove("Barney");
}
dara lugar a que salte el error java.util.ConcurrentModificationException, la sintaxis correcta seria: if (nombre.equals("Barney")) {
recorrer.remove();
}
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
public class Ejecutar{
public static void main(String args[]) {
List<String> list = new ArrayList<String>();
list.add("Bart");
list.add("Lisa");
list.add("Marge");
list.add("Barney");
list.add("Homer");
list.add("Maggie");
Iterator<String> recorrer = list.iterator();
while (recorrer.hasNext())
{
String nombre = recorrer.next();
if (nombre.equals("Barney")) {
recorrer.remove();
}else
if(nombre != "Barney"){System.out.println(nombre);}/* Si no se incluye esta condición, pues también se imprimirá "Barney" puesto que la variable (nombre) hasta que
no se inicie el siguiente ciclo, luego de la eliminación de "Barney" en la colección "list" mediante el Iterator "recorrer" tiene como valor "Barney"
Esto es una solución alternativa para mostrar por pantalla los elementos de la colección, así que podrían considerarse otras opciones.*/
}
System.out.println("\nEsta colección ahora contiene: " + list.size() + " objetos." );
}
}
El uso del bucle for-each tiene algunos inconvenientes. Uno de ellos, que para recorrer la colección nos
basamos en la propia colección y por tanto no podemos (o al menos no debemos) manipularla durante
su recorrido. Supongamos que vamos recorriendo una lista de 20 objetos y que durante el recorrido
borramos 5 de ellos. Probablemente nos saltará un error porque Java no sabrá qué hacer ante esta
modificación concurrente.
Sería como seguir un camino marcado sobre unas baldosas y que durante el camino nos movieran las
baldosas de sitio: no podríamos seguir el camino previsto. Este tipo de problemas se suelen presentar
con un mensaje de error del tipo java.util.ConcurrentModificationException.
List list = new ArrayList ();
Lo correcto seria usar una sintaxis como: List<TipoDeObjeto> list = new ArrayList<TipoDeObjeto>();
donde TipoDeObjeto indica el tipo de objeto que contendra la lista, ahora bien! te podrias preguntar, si mi lista contiene tres tipos diferentes (String, Integer, Float), cual es el que debo de usar aquí?List<Object> list = new ArrayList<Object>();
y lo mismo para el Iterator: Iterator<Object> elements = list.iterator();
import java.util.*;
public class ListExample {
public static void main(String[] args) {
// declaration
List<Object> list = new ArrayList<Object>();
// als some elements to the list
list.add("par");
list.add("arroz");
list.add("harina");
list.add(4);
list.add(5.0F);
list.add("arroz");
// duplicate element, is added to list
list.add(4); // duplicate, is added
Iterator<Object> elements = list.iterator();
// Print contents of the list
while (elements.hasNext()) {
System.out.println(elements.next());
} // while
} // main
} // class
Con esto queda resuelto lo del warning, espero que te sea útil mi explicación./*public void cambioDeEspecialidad.....no supe como hacerlo queria poner una condicion dentro de "public void setEspecialidad" para cuando cambiara la especialidad asignar a cambio= true y poner el mensaje despues.Normalmente un método set no debería mostrar un mensaje por pantalla al ser invocado, lo correcto es que un método set solo cumpla su cometido el cual es realizar un procedimiento para asignar (o reasignar) un valor a una variable.
*/
En cada método, incluye una instrucción para que se muestre por consola un mensajepero mas adelante comprenderás el porque de las cosas (todo a su tiempo)
informando del cambio. Por ejemplo si cambia la especialidad del médico, debe aparecer un mensaje
que diga: “Ha cambiado la especialidad del médico de nombre … . La nueva especialidad es: …”.
System.out.println("Ja rueda es para un vehiulo grande");no es el graaan problema, pero ya cuando estés a un nivel mas avanzado (o con un empleo) esto no es muy agradable que digamos, pero tranquilo que hasta ami me a pasado
float convertir = Float.parseFloat(entradaUsuario);
La clase polideportivo: querrás decir ancho, setAncho, etc. porque hancho, setHancho ¿?Por si acaso no hay algún foro sobre la buena ortografía en esta web?? creo que me vendría muy bien
En el método getSuperficieEdificio has escrito return (largo * ancho * altura) * 6; ... supongo que esto lo pones como ejemplo de fórmula que podría aplicarse, pero sin haberle prestado atención, ya que un largo por ancho por altura devuelve un volumen, no una superficie. Más lógico hubiera sido largo * ancho (superficie de un rectángulo), pero esto no era el objetivo del ejercicio...En realidad es como dices, es un ejemplo de formula.
La clase de test:
Donde has escrito
InstalacionDeportiva poliDeportivo1 = new PoliDeportivo("Felix Sanchez", "100 mts con ballas", 48F, 28F, 50F);
Edificio poliDeportivo2 = new PoliDeportivo("Estadio Quisqueya", "Baseball", 57F, 32.7F, 60F);
PoliDeportivo poliDeportivo3 = new PoliDeportivo("Club san carlos", "Basketball", 46F, 33F, 50.4F);
Edificio edificioDeOficinas1 = new EdificioDeOficinas(20, 39.5F, 31F, 55F);
EdificioDeOficinas edificioDeOficinas2 = new EdificioDeOficinas(35, 56F, 37.3F, 57.9F);
Lo más adecuado hubiera sido:
Edificio poliDeportivo1 = new PoliDeportivo("Felix Sanchez", "100 mts con ballas", 48F, 28F, 50F);
Edificio poliDeportivo2 = new PoliDeportivo("Estadio Quisqueya", "Baseball", 57F, 32.7F, 60F);
Edificio poliDeportivo3 = new PoliDeportivo("Club san carlos", "Basketball", 46F, 33F, 50.4F);
Edificio edificioDeOficinas1 = new EdificioDeOficinas(20, 39.5F, 31F, 55F);
Edificio edificioDeOficinas2 = new EdificioDeOficinas(35, 56F, 37.3F, 57.9F);
En relación al final del curso, creo que puedes estar orgulloso de haber mantenido la constancia para llevar adelante un curso de estas características. También has tenido la suerte de tener moderadores y compañeros que te han dado su apoyo, pero el trabajo y el mérito es tuyo, así que enhorabuena. Por otro lado, por parte de los responsables de la web tenemos que agradecer tu actitud de colaboración, por ejemplo este mensaje de hace un par de meses: https://www.aprenderaprogramar.com/foros/index.php?topic=952.0
También tu algoritmo while(estesVivo) nos ha parecido de lo más acertado... esperamos que tú nos recuerdes al equipo de la web y al resto de personas que han colaborado dándote apoyo conforme dice este algoritmo tuyo. De la misma forma que le hemos planteado a otras personas desde el equipo de moderadores, te planteamos que continúes participando del foro ahora como profesor o tutor de apoyo para personas que se están iniciando, o simplemente para seguir hablando de programación y formación en programación. Con esta línea de trabajo por parte del equipo de la web tratamos de dejar puertas abiertas con vistas al futuro a las personas que destacan por su actitud de colaboración, cosa que sin duda has hecho. Saludos cordiales.
¿Entre qué clases existe una relación que se asemeja a la herencia múltiple?Respuesta:
public interface InstalacionDeportiva
{
String tipoDeInstalacion = "Recinto delimitado";// Por defecto public static final (constante).
String getTipoDeInstalacion();// Por defecto abstract public.
}
public interface Edificiopublic interface Edificio
{
String tipoDeConstruccion = "Construccion cubierta";// Por defecto public static final (constante).
float getSuperficieEdificio();// Por defecto abstract public.
}
public class PoliDeportivo implements InstalacionDeportiva, Edificiopublic class PoliDeportivo implements InstalacionDeportiva, Edificio
{
private String nombre, tipoDeDeporte;
private float largo, hancho, altura;
//Constructor geeral
public PoliDeportivo()
{
nombre = "Desconocido";
tipoDeDeporte = "Desconocido";
largo = 0F;
hancho = 0F;
altura = 0F;
}
//Constructor con parametros
public PoliDeportivo(String nombre, String tipoDeDeporte, float largo, float hancho, float altura)
{
this.nombre = nombre;
this.tipoDeDeporte = tipoDeDeporte;
this.largo = largo;
this.hancho = hancho;
this.altura = altura;
}
//Setters
public void setNombre(String nombre)
{
this.nombre = nombre;
}
public void setTipoDeDeporte(String tipoDeDeporte)
{
this.tipoDeDeporte = tipoDeDeporte;
}
public void setLargo(float largo)
{
this.largo = largo;
}
public void setHancho(float hancho)
{
this.hancho = hancho;
}
public void setAltura(float altura)
{
this.altura = altura;
}
//Getters
public String getNombre()
{
return nombre;
}
public String getTipoDeDeporte()
{
return tipoDeDeporte;
}
@Override
public String getTipoDeInstalacion()
{
return this.tipoDeInstalacion;
}
public float getLargo()
{
return largo;
}
public float getHancho()
{
return hancho;
}
public float getAltura()
{
return altura;
}
//Otros metodos
@Override
public float getSuperficieEdificio()
{
return (largo * hancho * altura) * 6;
}
@Override
public String toString()
{
return "Tipo de instalacion: " + tipoDeInstalacion + "\nInstalacion para el deporte de: " + tipoDeDeporte +"\nNombre: " + nombre + "\nLargo : " + largo + " mts\nHancho: " +
hancho + " mts\nAltura: " + altura + " mts\nSuperficie total: " + getSuperficieEdificio() + " m²";
}
}
public class EdificioDeOficinas implements Edificio public class EdificioDeOficinas implements Edificio
{
private int cantidadDeOfics;
private float largo, hancho, altura;
public EdificioDeOficinas()
{
cantidadDeOfics = 0;
largo = 0F;
hancho = 0F;
altura = 0F;
}
//Cnstructor con parametros
public EdificioDeOficinas(int cantidadDeOfics, float largo, float hancho, float altura)
{
this.cantidadDeOfics = cantidadDeOfics;
this.largo = largo;
this.hancho = hancho;
this.altura = altura;
}
//Setters
public void setCantidadDeOfics(int cantidadDeOfics)
{
this.cantidadDeOfics = cantidadDeOfics;
}
public void setLargo(float largo)
{
this.largo = largo;
}
public void setHancho(float hancho)
{
this.hancho = hancho;
}
public void setAltura(float altura)
{
this.altura = altura;
}
//Getters
public int getCantidadDeOfics()
{
return cantidadDeOfics;
}
public float getLargo()
{
return largo;
}
public float getHancho()
{
return hancho;
}
public float getAltura()
{
return altura;
}
//Otros metodos
public String getTipoDeConstruccion()
{
return tipoDeConstruccion;
}
@Override
public float getSuperficieEdificio()
{
return (largo * hancho * altura) * 6;
}
@Override
public String toString()
{
return "Tipo de construccion: " + tipoDeConstruccion + "\nCantidad de oficinas: " + cantidadDeOfics + "\nLargo : " + largo + " mts\nHancho: " + hancho +
" mts\nAltura: " + altura + " mts\nSuperficie total: " + getSuperficieEdificio() + " m²";
}
}
public class TestSemejansaHerenciaMultimport java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
public class TestSemejansaHerenciaMult
{
private static List<Edificio> listaEdificios = new ArrayList<Edificio>();
public static void main(String []args)
{
System.out.println(" *****Lista de construcciones en proyecto*****\n\n");
//Creacion de objetos
InstalacionDeportiva poliDeportivo1 = new PoliDeportivo("Felix Sanchez", "100 mts con ballas", 48F, 28F, 50F);
Edificio poliDeportivo2 = new PoliDeportivo("Estadio Quisqueya", "Baseball", 57F, 32.7F, 60F);
PoliDeportivo poliDeportivo3 = new PoliDeportivo("Club san carlos", "Basketball", 46F, 33F, 50.4F);
Edificio edificioDeOficinas1 = new EdificioDeOficinas(20, 39.5F, 31F, 55F);
EdificioDeOficinas edificioDeOficinas2 = new EdificioDeOficinas(35, 56F, 37.3F, 57.9F);
//Agregando objetos a la listaEdificios
listaEdificios.add((Edificio)poliDeportivo1);/*Los objetos tipo PoliDeportivo, son a su vez tipo InstalacionDeportiva y tipo Edificio, el ArrayList
listaEdificios esta definido para contener objetos de tipo definido Edificio, u objetos de una clase que implemente o herede de forma indirecta de
la interface Edificio. Al declarar el objeto poliDeportivo1 como tipo dinámico InstalacionDeportiva, no es posible agregarlo al ArrayList listaEdificios porque
este admite solo tipos definidos por la interface Edificio o tipos definidos por una clase que implemente esta interface o bien tipos definidos por una clase que
herede de otra clase que implemente la interface Edificio. Para poder agregar al objeto poliDeportivo1 al ArrayList listaEdificios, se le indica al
compilador que este objeto tambien implementa a la interface Edificio, mediante la declaracion: listaEdificios.add((Edificio)poliDeportivo1);*/
listaEdificios.add(poliDeportivo2);
listaEdificios.add(poliDeportivo3);
listaEdificios.add(edificioDeOficinas1);
listaEdificios.add(edificioDeOficinas2);
Iterator<Edificio> it = listaEdificios.iterator();
String linea = "____________________________________________________";
String tipoEdific = "";
float superficieGlobal = 0F;
while(it.hasNext())
{
Edificio tmpObjEdif = it.next();
if(tmpObjEdif instanceof PoliDeportivo)
{
tipoEdific = "\t\tTipo: Polideportivo";
}
if(tmpObjEdif instanceof EdificioDeOficinas)
{
tipoEdific = "\t Tipo: Edificio de oficinas";
}
superficieGlobal = superficieGlobal + tmpObjEdif.getSuperficieEdificio();
System.out.println(tipoEdific + "\n" + linea + "\n" + tmpObjEdif.toString() + "\n" + linea);
}
System.out.println("Total de construcciones en la lista: " + listaEdificios.size() + "\nSuperficie global de las " + listaEdificios.size() + " construcciones: " +
superficieGlobal + " m²" + "\nFin de la lista.");
}
}
Se debe pedir alCon relación a esta parte del ejercicio, cumples con la parte de dar la opción de agregar otro cantante famoso o salir del programa. Pero según lo que pide este párrafo del ejercicio, agregar un tercer cantante a la lista es un requisito y no una opción, en tu programa se puede terminar el programa solo con los 2 cantantes que tiene la lista por defecto, si así el usuario lo deseara. Si esto sucede pues incumples con lo que pide el ejercicio.
usuario un nombre y disco con más ventas de otro cantante famoso, y una vez introducidos los datos
mostrar la lista actualizada usando iterator. Una vez mostrada la lista actualizada, se debe dar opción a
elegir entre volver a introducir los datos de otro cantante o salir del programa (se podrán introducir
tantos datos de cantantes como se desee
public CantanteFamoso getCantante(int posicion)
{
if(posicion >= 0 && posicion < listaCantanteFamoso.size())
{
return listaCantanteFamoso.get(posicion);
}else{return null;}
}
Este metodo aparte de que no es necesario y nunca lo usas, tiene un if que no tiene mucha logica.public CantanteFamoso getRemoverCantante(int posicion)
{
if(posicion>=0 && posicion<listaCantanteFamoso.size())
{
return listaCantanteFamoso.remove(posicion);
}else {return null;}
}
Lo primero es el nombre del método, no es apropiado, lo segundo es que este método deberia de ser tipo procedimiento y no tipo funcion, la finalidad del métodoif(resp.equals("s")==true)//Condicion si deceamos ingresar de nuevo a otro Cantante
{
otroCantante.equals("s");//se iguala a True para que inicie de nuevo a agregar al cantante
}else
{break;//Rompe la condicion del IF
}
El ==true dentro en este if, no es necesario, el bucle seguirá dando vueltas mientras otroCantante sea igual que "s" sin la necesidad de ==true.System.out.println("Tamaño de la lista :"+ lista.getTamaño());por:
System.out.println("Total de cantantes en la lista :"+ lista.getTamaño() + " cantantes");Esto no surte ninguna variación en la funcionalidad del programa, pero muestra algo mas entendible para el usuario.
public class DiscoMusical
{
private String titulo, autor, formato;
private int anoEdicion;
private boolean digital;
Si solo fue un descuido al copiar y pegar, supongo que tu clase cuenta con un fragmento de código como este que acabo de pegar, que de paso e usado para completar el código de tu clase e identificar lo posibles errores. Pues tengo una duda que me tiene la cabeza echa un lio pues resulta que después de terminar el codigo e intentar compilarlo me envia un mensaje de error en apartado de CONSTRUCTOR "añoEdicion" en el cual me dice Incompatible TypesEste error de compilación hace referencia a que estas asignando un valor a una variable cuyo tipo de valor no coincide con el tipo de variable, debes de tener en cuenta que una variable recibe un valor de su tipo declarado, por ejemplo si declaro: int edad = "10"; al intentar compilar, me saltara un error: imcopatible types: java.lang.String cannot be converted to int. Lo que de manera explicita, significa que estoy intentando asignar un valor que no es el tipo de valor esperado para la variable edad.
public DiscoMusical ()
{
titulo = "Desconocido";
autor = "Desconocido";
anoEdicion = 0;
formato = "Desconocido";
digital = false;
} //Cierre del constructor
A si cada vez que crees un objeto de esta clase, cada objeto se creara con la finalidad de asignar un valor diferente (o igual) a cada una de sus variables, mediante su correspondiente metodo set.Iterator<Legislador> iterable = listinLegisladores.iterator();//Uso del polimorfismoEl comentario es valido para la clase, pero debió de estar mejor ubicado en otra linea, tendré esto mas pendiente
El comentario que colocas al final es adecuado en esta clase, pero esta instrucción solo es una declaración.
El polimorfismo se hace notar cuando usas el objeto tmpObj declarado como Legislador y como ya sabes según el objeto devuelto por el iterador invocará un método u otro para mostrar los datos
public class Encript
{
//Sin variables generales
public Encript()
{
//Constructor general (vacio)
}
public static void ado(String textoEntrante)
{
String base = "abcdefghijklmnopqrstuvwxyz";
String baseCifrado = "zyxwvutsrqponmlkjihgfedcba";
String textoSaliente = "";
String caracter = "";
int posicion = 0;
String tipoCaracter = "";
//Para poder leer los siguientes primeros 3 comentarios, favor decifrarlos pasandolos como parametro tipo String en la invocacion de ese metodo.
for (int i = 0; i < textoEntrante.length();i++)
{
caracter = textoEntrante.substring(i,i+1);
//Vhgv ru xlm vohv ru, zfnvmgz oz vuvxrvmxrz wvo xlwrtl zo kvinrgri zo zotlirgnl vezofzi ovgizh (jfv gznyrvm hlm xzizxgvivh) nzbfhxfozh b nrmfhx.
if(caracter.equals(caracter.toUpperCase())){base = base.toUpperCase(); baseCifrado = baseCifrado.toUpperCase();}
else if(caracter.equals(caracter.toLowerCase())){base = base.toLowerCase(); baseCifrado = baseCifrado.toLowerCase();}
posicion = base.lastIndexOf(caracter);
//Vhgv hdrgxs grvmv oz hvmxrooz gzivz wv zhrtmzi fm ezoli z oz ezirzyov grklXzizxgvi, xfbz ezirzyov hviz fhzwz kziz nlhgizi nvmhzqvh kli kzmgzooz
switch(posicion)
{
case -1: tipoCaracter = "Caracter-";break;
default: tipoCaracter = "Letra----";
}
//Vm vhgv Hbhgvn.lfg.kirmgom oz ezirzyov grklXzizxgvi rmwrxz xfzmwl vh fm xzizxgvi grkl ovgiz, l fm xzizxgvi vm hr.
System.out.println (tipoCaracter + "-" + caracter + "- posicion " + posicion);
if (posicion != -1)
{
textoSaliente = textoSaliente + baseCifrado.substring(posicion,posicion+1);
}
else
{
textoSaliente = textoSaliente + caracter;
}
}
System.out.println ("\nTexto entrante: " + textoEntrante + "\nTexto saliente: " + textoSaliente);
//Este codigo funciona tanto para cifrar como para descifrar
}
} // Fin de la clase Encript
a) ¿Una clase puede heredar de dos clases en Java?
b) ¿Una interface Java puede tener métodos que incluyan una sentencia while? ¿Una interface Java puede tener métodos que incluyan una sentencia System.out.println?
c1) ¿Un objeto Java puede ser del tipo definido por una interface?
c2) ¿Un objeto Java puede ser al mismo tiempo del tipo definido por una interface y del tipo definido por una clase que no implementa la interface?
c3) ¿Un objeto Java puede ser al mismo tiempo del tipo definido por una interface y del tipo definido por una clase que implementa la interface
Declara una clase abstracta Legislador que herede de la clase Persona, con un atributo
provinciaQueRepresenta (tipo String) y otros atributos. Declara un método abstracto
getCamaraEnQueTrabaja. Crea dos clases concretas que hereden de Legislador: la clase Diputado y la
clase Senador que sobreescriban los métodos abstractos necesarios. Crea una lista de legisladores y
muestra por pantalla la cámara en que trabajan haciendo uso del polimorfismo.
Donde dices que vas a hacer comparaciones sin el método equals. Creo entender que haces eso a propósito, si es así, no entiendo el motivo, tal vez me puedas explicar tu razónEl método equals es un método que nace en la clase padre de todas las clases (public class Object) y por tanto es heredado en todas las demás clases, ya sean clases de la librería de java o clases que diseñemos nosotros mismos. El cometido o uso de este método es comparar igualdad entre objetos, no obstante siendo un tipo String un objeto y una instancia de clase otro objeto, no es lo mismo utilizar equals para comparar objetos tipo String que utilizarlo para comparar instancias de clases, puesto que se obtendría un resultado no real o no deseado al comparar instancias de clase. Por tal motivo es recomendable sobre escribir este método en cada clase donde se harán comparaciones entre sus instancias, indicando en el cuerpo del método las condiciones a cumplir para que dos objetos de esa clase sean iguales.
Para mi, los dos círculos circulo1 y circulo2 deberían ser iguales (tienen la misma dimensionPrincipal) y tu código responde false a la expresión 'circulo1.equals(circulo2)'En cierto punto estas en lo correcto, no solo tienen la misma dimensionPrincipal, sino que también tienen el mismo radio y el mismo PI, pero si te fijas estoy usando el método equals no sobre escrito para compararlos, por tanto es normal que devuelva un resultado no deseado (false)
//Para comparar objetos de tipo circulo se invoca el método equals de su super clase, heredado a su vez de la clase padre ObjetcEn este comentario parece que me explique mal, lo que quise decir es que el equals que se ejecuta es el de la clase Object, puesto que el compilador busca este método primero en la clase Circulo, no lo encuentra y pasa a la clase Figura, tampoco lo encuentra sobre escrito en esa clase, hasta que final mente lo encuentra en la clase Object, pero las condiciones a cumplir en el cuerpo de el método equals de la clase Object, no son las correctas para determinar la correcta igualdad entre circulo1 y circulo2, de aquí proviene el "error" ¿Son iguales el circulo1 y el circulo2? false.
En la clase Figura has colocado un método 'public double calcularArea()' que no usarás nunca, además devuelve un valor que no tiene sentidoSobre esto, estoy de acuerdo contigo en cuanto al método, mientras estuve diseñando el código me surgió la necesidad de crear este método, para que las sub clases Cuadrado y Circulo lo hereden de Figura, intente crearlo sin contenido entre las llaves, porque solo me interesaba sobre escribirlo en las sub clases, pero al ser un método tipo funcion, esto no me fue posible, ahora que e estudiado la entrega CU00695B me doy cuenta que lo que yo necesitaba era un método abstracto (sin cuerpo) pero no pude descubrirlo sin antes estudiar la entrega CU00695B
'return dimensionPrincipal * PI;'
Como incluye la constante PI, no es útil para el cuadrado, y como mucho sería la longitud del círculo si dimensionPrincipal fuera el diámetro del círculo
Finalmente en las clases Cuadrado y Circulo creas los atributos lado y radio respectivamente que no usas para hacer cálculos pues el atributo dimensionPrincipal sustituye al lado en un caso y al radio o diámetro según quieras en la clase CirculoEs cierto que los atributos lado y radio, no son necesarios (En referencia al ejercicio) pero veo mas prudente que una clase ademas de contener los atributos y métodos que hereda de su super clase, también cuente con atributos y métodos propios (No es obligatorio). Si te fijas en la clase 'TestDeIgualdad' aparece esta fracción de código:
circulo3.setRadio(4.5);
la cual tiene como objetivo, hacer al objeto circulo3 diferente a los objetos circulo1 y circulo2, independientemente del resultado erróneo de la comparación, por tanto en este punto se le encuentra utilidad al atributo radio y al método setRadio() de la clase CirculoSobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.
Abraham Lincoln (1808-1865) Presidente estadounidense.
aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación