verificar plugin internet instalado instalada google cómo comprobar como chrome activar java encapsulation

plugin - verificar java version



El concepto de encapsulación de Java no está claro (12)

Esta es una pregunta básica pero todavía no entiendo el concepto de encapsulación. No entendí cómo podemos cambiar las propiedades de la clase de otra clase. Porque cuando intentamos establecer el valor de instancia pública de la clase, debemos crear el objeto de esa clase y luego establecer el valor. Y cada objeto se refiere a una memoria diferente. .so incluso si cambiamos el valor de la instancia, esto no afectará a ningún otro objeto.

Incluso intento cambiar el valor de la instancia pública estática, pero tampoco puedo cambiar el valor de la propiedad de clase.

El siguiente ejemplo se da

// Employee class public class Employee { public static int empid; public static String empname; public static void main(String[] args) { System.out.println("print employe details:"+empid+" "+empname); } // EmployeeTest class public class EmployeeTest { public static void main(String[] args) { Employee e = new Employee(); e.empid=20; e.empname="jerry"; Employee.empid=10; Employee.empname="tom"; } } }

Cada vez que corro la clase Employee obtengo el mismo valor

print employe details:0 null

Aunque no estoy siguiendo el concepto de encapsulación y no puedo cambiar el valor de instancia pública de la clase del empleado. Por favor, ayúdeme a entender el concepto en el que me estoy equivocando.


¿Quiere decir que el valor de empid debería ser 10 y empname tom en lugar de 0 y nulo? Si es así, entonces:

1) la memoria a las variables se asigna en el tiempo de ejecución, y también se desasigna una vez que se termina el programa.

2) Por lo tanto, si piensas que una vez si le das 10 a empid, siempre debería ser 10, no es así, porque empid es solo una referencia a una memoria que almacena "10".

3) Entonces, por desasignación, quiero decir que empid ya no apunta al área de memoria que almacena 10, una vez que el programa termina

4) siempre que ejecute un nuevo programa, empid ahora apunta a otra área de memoria, y a esa memoria se le asigna el valor predeterminado de acuerdo con el tipo de datos correspondiente, en caso de una variable estática. De ahí siempre 0 y nulo.


El concepto de encapsulación es una técnica de diseño que se relaciona con la ocultación de la información. El principio subyacente es proporcionar acceso protegido a los atributos de clase, a través de una interfaz bien diseñada. El propósito de la encapsulación es hacer cumplir los invariantes de la clase.

Para seguir en su ejemplo, considere la interfaz de esta clase:

class Employee private final String firstName; private final String lastName; public Employee(final firstName, final lastName) { this.firstName = firstName; this.lastName = lastName; } public String getName() { return firstName + " " + lastName; } }

Tenga en cuenta que al declarar los atributos como privados, esta clase restringe a los clientes el acceso directo al estado de las instancias de objeto del empleado. La única forma en que los clientes pueden acceder a ellos es a través del método getName (). Esto significa que esos atributos están encapsulados por la clase. También tenga en cuenta que al declarar los atributos como finales e inicializarlos en el constructor, creamos una clase efectivamente inmutable, es decir, cuyo estado no se puede modificar después de la construcción.

Una implementación alternativa sería la siguiente:

class Employee private String firstName; private String lastName; public Employee(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; } public String getName() { return firstName + " " + lastName; } public String setName(String firstName, String lastName) { if (firstName == null) { throw new IllegalArgumentException("First name cannot be null"); } if (lastName == null) { throw new IllegalArgumentException("Last name cannot be null"); } this.firstName = firstName; this.lastName = lastName; } }

En este ejemplo, el objeto no es inmutable, pero su estado está encapsulado, ya que el acceso se realiza solo a través de accesores y modificadores. Observe aquí cómo la encapsulación puede ayudarlo a proteger las invariantes del estado del objeto. Al restringir las modificaciones a través de un método, obtendrá un mejor control de cómo se modifica el estado del objeto, agregando validaciones para asegurarse de que cualquier modificación sea coherente con la especificación de la clase.


El motivo por el que obtiene la salida "imprimir detalles del empleo: 0 nulo" al ejecutar la clase Employee es porque esas variables no están inicializadas. Es decir, no les asigna ningún valor dentro de la clase Empleado.

Lo que sea que haga dentro de la clase EmployeeTest no afectará los valores de las variables en Employee la próxima vez que se ejecute. Considere cada ejecución de un programa Java como una "pizarra limpia".

En el punto de encapsulación, realmente no debería usar la palabra clave static . Si va a encapsular, consulte la otra respuesta a esta pregunta, tiene un buen ejemplo de código para que lo use.


La ENCAPSULACIÓN es un mecanismo de envolver los métodos y las variables como una sola unidad. por ejemplo, cápsula, es decir, mezclado de varios medicamentos.

Las variables de una clase se ocultarán de otras clases, ya que se declararán privadas y solo se podrá acceder a ellas a través de los métodos de su clase actual.

Para lograr la encapsulación en Java - * Declare las variables de una clase como privadas. * Proporcionar métodos de establecimiento y obtención públicos para modificar y ver los valores de las variables. * La clase Java Bean es el ejemplo de una clase completamente encapsulada.


La encapsulación es un concepto de POO. La clase se considera como una cápsula que contiene datos + comportamiento. Los datos deben ser privados y solo se debe acceder a ellos utilizando métodos públicos llamados captadores y definidores. Puede consultar este tutorial de encapsulation para obtener más información sobre este concepto.


La encapsulación se puede describir como una barrera protectora que impide que el código y los datos sean accedidos aleatoriamente por otro código definido fuera de la clase. El acceso a los datos y el código está estrechamente controlado por una interfaz.

La encapsulación en Java es la técnica de hacer que los campos de una clase sean privados y proporcionar acceso a los campos a través de métodos públicos.

Si un campo se declara privado, no puede acceder a él nadie que esté fuera de la clase, ocultando así los campos dentro de la clase. Por esta razón, la encapsulación también se conoce como ocultación de datos .

Ejemplo en tiempo real: coches y propietarios. Todas las funciones de los coches están encapsuladas con los propietarios. Por lo tanto, nadie más puede acceder a él ...

El siguiente es el código para este ejemplo.

public class Main { public static void main(String[] args) { Owner o1=new Car("SONY","Google Maps"); o1.activate_Sunroof(); o1.getNavigationSystem(); o1.getRadioSytem(); } } //Interface designed for exposing car functionalities that an owner can use. public interface Owner { void getNavigationSystem(); void getRadioSytem(); void activate_Sunroof(); } /* Car class protects the code and data access from outside world access by implementing Owner interface(i.e, exposing Cars functionalities) and restricting data access via private access modifier. */ public class Car implements Owner { private String radioSystem; private String gps; public Car(String radioSystem, String gps) { super(); this.radioSystem = radioSystem; this.gps = gps; } public String getRadioSystem() { return radioSystem; } public void setRadioSystem(String radioSystem) { this.radioSystem = radioSystem; } public String getGps() { return gps; } public void setGps(String gps) { this.gps = gps; } @Override public void getNavigationSystem() { System.out.println("GPS system " + getGps() + " is in use..."); } @Override public void getRadioSytem() { System.out.println("Radio system " + getRadioSystem() + " activated"); } @Override public void activate_Sunroof() { System.out.println("Sunroof activated"); } }


Parece que está ejecutando dos clases diferentes por separado y suponiendo que los cambios realizados en los atributos cuando ejecute EmployeeTest se reflejarán en la ejecución Employee . Tenga en cuenta que los cambios se reflejarán en la misma instancia de JRE. Disculpe en caso de que haya entendido mal su problema.

EDIT: según la entrada del usuario. Aquí está el código de cómo puede acceder y actualizar los valores de miembro estáticos:

class Employee { public static int empid; public static String empname; public static void main(String[] args) { System.out.println("print employe details:" + empid + " " + empname); } } // EmployeeTest class public class EmployeeTest { public static void main(String[] args) { Employee e = new Employee(); e.empid = 20; e.empname = "jerry"; Employee.empid = 10; Employee.empname = "tom"; Employee.main(null); } }


Sí, esto puede ser un poco confuso a veces. Vayamos paso a paso: Primero, necesitas entender.

  • ¿Qué es la encapsulación y por qué se utiliza?

La encapsulación es uno de los cuatro conceptos fundamentales de la POO. La encapsulación es la técnica de hacer que los campos de una clase sean privados y brindar acceso a los campos a través de métodos públicos. Si un campo se declara privado, no puede acceder a él nadie que esté fuera de la clase, ocultando así los campos dentro de la clase. Por esta razón, la encapsulación también se conoce como ocultación de datos.

La encapsulación se puede describir como una barrera protectora que impide que el código y los datos sean accedidos aleatoriamente por otro código definido fuera de la clase. El acceso a los datos y el código está estrechamente controlado por una interfaz.

El principal beneficio de la encapsulación es la capacidad de modificar nuestro código implementado sin romper el código de otros que usan nuestro código. Con esta característica, la encapsulación proporciona mantenibilidad, flexibilidad y extensibilidad a nuestro código.

Tomemos un pequeño ejemplo:

public class EncapTest{ private String name; private String idNum; private int age; public int getAge(){ return age; } public String getName(){ return name; } public String getIdNum(){ return idNum; } public void setAge( int newAge){ age = newAge; } public void setName(String newName){ name = newName; } public void setIdNum( String newId){ idNum = newId; } }

Los métodos anteriores se llaman Accessors (también conocidos como getters y setters). Ahora puedes preguntar,

  • ¿Por qué debería utilizar los accesores ..? En realidad, hay muchas buenas razones para considerar el uso de accesores en lugar de exponer directamente los campos de una clase. Los mejores y los definidores hacen que las API sean más estables.

Por ejemplo, considere un campo público en una clase a la que acceden otras clases . Ahora, más adelante, desea agregar cualquier lógica adicional al obtener y configurar la variable. Esto afectará al cliente existente que utiliza la API. Por lo tanto, cualquier cambio en este campo público requerirá un cambio en cada clase que lo refiera. Por el contrario, con los métodos de acceso, uno puede agregar fácilmente cierta lógica, como almacenar en caché algunos datos, inicializarlos perezosamente más tarde. Además, uno puede activar un evento de propiedad modificada si el nuevo valor es diferente del valor anterior. Todo esto será transparente para la clase que obtiene valor utilizando el método de acceso.

Hay tantos tutoriales y explicaciones sobre cómo y qué son. Google ellos.

En cuanto a tu problema actual:

  1. Tienes dos clases diferentes, cada una con una principal. Eso está mal. Tendrán diferentes propiedades.
  2. El cambio de código sugerido por @Subhrajyoti Majumder es el correcto. Compruebe la respuesta para resolver el problema.

Mientras tanto, lea sobre

Para una mejor comprensión de los conceptos. Espero eso ayude. :)


encapsulation = VARIABLES (sea privado a, b, c) + MÉTODOS (setA & getA, setB & getB ....) podemos encapsular usando el modificador privado. deje de considerar su variable pública creada y una variable privada en su clase ... en caso de que tenga que dar esas variables a otra clase para solo lectura (solo ellas pueden ver y usar sin poder modificar) no hay posibilidad con variables o métodos públicos, pero podemos hacerlo en privado proporcionando el método get. así que las variables o métodos privados de tu clase están bajo tu control. Pero en público no hay oportunidad ... creo que puedes entender.


por supuesto, el cambio en un objeto no afectará a otro objeto. Supongamos que tienes un estudiante de clase y todos los niños en tu escuela son sus objetos. si uno abandona la escuela, esto no significa que todos los demás estudiantes (objeto de la clase del alumno) también deben abandonar la escuela.

La encapsulación es el concepto de tener sus variables de clase como privadas , de modo que nadie pueda jugar directamente con sus miembros de datos del mundo exterior. pero proporciona el método público , para permitir que el mundo exterior juegue con su miembro de datos, de la manera que desee. Subhrajyoti Majumder proporciona el ejemplo de codificación agradable de la encapsulación.

(los miembros estáticos son iguales para todos los objetos de la clase, por ejemplo: variable de conteo estático, para contar el número de objetos de la clase del estudiante (número de estudiantes en la escuela)).

Edita como lo pediste:

Ejemplo:

public class student{ public String name; public student() {} }

y en su función principal, el mundo exterior puede jugar con los atributos de su clase como:

student s = new student(); s.name = "xyz";

Supongamos que no desea que el mundo exterior cambie su atributo de nombre de objeto. luego debe hacer que el nombre ''nombre'' sea privado y proporcionar un método público para ver solo el nombre (obtener).

Ejemplo:

public class student{ private String name; public student() {} public String getName(){ return this.name; } }

y ahora, en su método principal, solo puede obtener el nombre del objeto, y no puede configurarlo a un nuevo valor, como podría hacer en el primer ejemplo.

student s = new student(); String sname = s.getName();

y si lo intentas

s.name = "newname";

compilador no te permitirá eso. ya que no tienes permiso para acceder a los miembros privados.


public static campos public static están asociados con la clase, no con el objeto, rompe la regla de encapsulación del Objeto.

Clase de Employee con dos campos encapsulados empid & empname .

public class Employee { private int empid; private String empname; public int getEmpid(){ return this.empid; } public void setEmpid(int empid){ this.empid = empid; } ... } public class EmployeeTest { public static void main(String[] args) { Employee e = new Employee(); e.setempId(1); Employee e1 = new Employee(); e1.setempId(2); } }

Documentación para una mejor comprensión de la encapsulación.


Encapsulation means combining data and code together(class). The main purpose of encapsulation is you would have full control on data by using the code. class Encap{ private int amount; public void setAmount(int amount) { this.amount = amount; } Here, you can set the amount using the setAmount method, but value should be more than 100. So, i have the control on it. public void setAmount(int amount) { if(amount>100) this.amount = amount; }