publicclass Circulo {publicdouble radio;// ❌ públicopublicdoublecalcularArea(){returnMath.PI* radio * radio;}}publicclass Main {publicstaticvoidmain(String[] args){ Circulo c =newCirculo(); c.radio=5;// 👎 cualquiera puede cambiar el radioSystem.out.println("Área: "+ c.calcularArea());}}
Con encapsulación ✅
publicclass Circulo {privatedouble radio;// 👈 ahora es privado// Setter público para asignar valorpublicvoidsetRadio(double radio){this.radio= radio;}publicdoublecalcularArea(){returnMath.PI* radio * radio;}}
MAIN ✅
publicclass Main {publicstaticvoidmain(String[] args){ Circulo c =newCirculo(); c.setRadio(5);// ✅ se controla con un métodoSystem.out.println("Área: "+ c.calcularArea());}}
Con constructor 🚀
publicclass Circulo {privatedouble radio;// Constructor → obliga a inicializar el radiopublicCirculo(double radio){this.radio= radio;}publicdoublecalcularArea(){returnMath.PI* radio * radio;}}
MAIN ✅
publicclass Main {publicstaticvoidmain(String[] args){ Circulo c =newCirculo(5);// 👈 más limpioSystem.out.println("Área: "+ c.calcularArea());}}
Con validación 🔒
publicclass Circulo {privatedouble radio;// 👇 Constructor públicopublicCirculo(double radio){setRadio(radio);// 👈 el constructor SÍ puede llamar al setter privado}// 👇 Setter privado (solo la clase lo puede usar)privatevoidsetRadio(double radio){if(radio <=0)thrownewIllegalArgumentException("El radio debe ser positivo");this.radio= radio;}// 👇 Método público para usar desde fuerapublicdoublecalcularArea(){returnMath.PI* radio * radio;}// 👇 Getter público si quieres consultar el radiopublicdoublegetRadio(){return radio;}}
MAIN ✅
publicclass Main {publicstaticvoidmain(String[] args){ Circulo c1 =newCirculo(5);// ✅ pasa por el setter privadoSystem.out.println("Radio: "+ c1.getRadio());System.out.println("Área: "+ c1.calcularArea()); Circulo c2 =newCirculo(-3);// ❌ lanza excepción}}
Resultado 🚀
Área:78.53981633974483Exception in thread "main" java.lang.IllegalArgumentException: El radio debe ser positivo