Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
5
respuestas

[Duda] Modificador de acceso "default"

Hola, el código que comparto, es el de la muestra que nos proveen para la explicación. Quisiera sabe cómo me doy cuenta, de que el atributo "saldo" y el método "retirar" tienen el modificador "default". No lo dice en ningún lado.

package com.aluracursos.tests;
public class Principal {

    public static void main(String[] args) {
        Cuenta c1 = new Cuenta();
        c1.saldo = 300;
        c1.retirar(100);
    }

}

Desde ya muchas gracias, saludos!

5 respuestas
solución!

porque el default por lo que entendí es el que no se nombra, osea esta: private -- default -- protected public

ese en específico no se nombra es decir con tu ejemplo:

 private static void main(String[] args) {
    //codigo
    }
  //asi iria el default sin nada 
   static void main(String[] args) {
    //codigo
    }
 protected static void main(String[] args) {
//codigo
}
 public static void main(String[] args) {
//codigo
}

Hola Gabiel, muchas gracias por tu respuesta. Ya lo anoto. Saludos!!

Hola Pola, en el código que compartiste, se está trabajando con una clase llamada Cuenta, que no está completamente visible en el fragmento proporcionado. Sin embargo, vamos a analizar el código y entender cómo funciona el modificador "default" en Java, que es esencial para comprender tu pregunta.

Modificadores de Acceso en Java En Java, hay cuatro tipos principales de modificadores de acceso para los miembros de una clase (atributos y métodos):

public: El miembro es accesible desde cualquier otra clase. protected: El miembro es accesible dentro del mismo paquete y por las subclases. private: El miembro es accesible solo dentro de la clase en la que se define. default (sin especificar ningún modificador): El miembro es accesible solo dentro del mismo paquete. Análisis del Código En el fragmento de código que proporcionaste:

Cuenta c1 = new Cuenta(); c1.saldo = 300; c1.retirar(100); c1.saldo = 300;: Aquí se está accediendo directamente al atributo saldo de la instancia c1 de la clase Cuenta. Para que esto sea posible, saldo debe tener un modificador de acceso que permita su visibilidad desde la clase Principal. Dado que Principal y Cuenta están en el mismo paquete (com.aluracursos.tests), si el atributo saldo no tiene un modificador explícito, por defecto es "default", lo que significa que es accesible dentro del mismo paquete.

c1.retirar(100);: Similarmente, el método retirar se está invocando en la instancia c1. Para que esto sea posible sin errores de compilación, el método debe ser visible desde la clase Principal, lo cual es posible si tiene un modificador "default" o "public", dado que ambas clases están en el mismo paquete.

Cómo Saber si Tienen el Modificador "Default" Revisar la Declaración: Si en la declaración del atributo saldo o del método retirar no ves ninguno de los modificadores (public, protected, o private), entonces automáticamente tienen el modificador "default".

Contexto del Paquete: Como ambas clases (Principal y Cuenta) están en el mismo paquete (com.aluracursos.tests), los miembros con modificador "default" son accesibles entre ellas.

En resumen, si no ves ningún modificador explícito en las definiciones de saldo o retirar, y puedes acceder a ellos desde otra clase en el mismo paquete, entonces están utilizando el modificador "default"

Fantástico Edwin !!! Me quedó super claro !!! Muchas gracias !!!! Saludos!!

Hola, Paola. Yo tambien me confundi en esa parte y vi que fue porque los dos fragmentos de codigo que pusieron de ejemplo, son parte del mismo codigo, aunque los pusieron por separado, entonces, lo que le falta a tu codigo, que es donde se define el default, es lo anterior:

package com.aluracursos.cuenta;

public class Cuenta {

  double saldo;

  retira(double valor) {
    // lógica del retiro...
  }
}

En esa fraccion del codigo, se ve que el atributo saldo y el metodo retirar, no tienen ningun modificador de acceso, lo que los hace default.

Si tuvieran modificadores de acceso, se verian asi:

PARA PUBLIC:

public double saldo;
public retira(double valor) {
    // lógica del retiro...
}

PARA PRIVATE:

private double saldo;
private retira(double valor) {
    // lógica del retiro...
}

PARA PROTECTED:

protected double saldo;
protected retira(double valor) {
    // lógica del retiro...
}

Espero que mi respuesta te sirva, aunque ya te hayan respondido jeje