English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriais Básicos de Java

Java Controle de Fluxo

Java Array

Java Programação Orientada a Objetos (I)

Java Programação Orientada a Objetos (II)

Java Programação Orientada a Objetos (III)

Tratamento de Exceções Java

Java Lista (List)

Java Fila (Queue)

Java Mapa (Map)

Java Conjunto (Set)

Java Entrada e Saída (I/O)

Java Reader/Writer

Outros tópicos do Java

Encapsulamento Java

Neste tutorial, você aprenderá sobre a encapsulação e a ocultação de dados no Java através de exemplos.

Encapsulamento Java

A encapsulação é uma das funcionalidades importantes da programação orientada a objetos. Encapsulação é o ato de ligar campos e métodos em um único classe.

Agrupar campos e métodos semelhantes dentro de uma classe também ajuda a ocultar dados.

Encapsulamento de campos e métodos

Normalmente, a encapsulação é o processo de empacotar código semelhante em um único lugar.

No Java, podemos agrupar campos e métodos que operam juntos em uma única classe. Por exemplo:

class Rectangle {
   int length;
   int breadth;
   public void getArea() {}
}

No programa acima, o método getArea() calcula a área do retângulo. Para calcular a área, ele precisa da largura (length) e da largura (breadth). Portanto, os campos de dados length, breadth e o método getArea() são colocados na classe Rectangle.

Encapsulação de dados Java

A ocultação de dados é uma maneira de limitar o acesso aos membros de dados ocultando os detalhes de implementação.

A encapsulação também oferece um método para ocultar dados.

A ocultação de dados pode ser implementada através de modificador de acesso. No Java, há quatro modificador de acesso:

  • public - A propriedade ou método decorado é público e pode ser acessado em qualquer lugar, todos os atributos e métodos são públicos por padrão

  • private - A propriedade ou método decorado é privado e não pode ser acessado fora da classe onde foi declarado

  • protected - modificado pelos atributos ou métodos protegidos, é semelhante ao private, a diferença é que ele também é permitido ser acessado nas subclasses

  • default - ou seja, sem qualquer modificador de acesso, geralmente chamado de "padrão de acesso padrão". Neste modo, apenas o acesso dentro do mesmo pacote é permitido.

Para obter mais informações, acesseModificador Java

Exemplo1:使用 private 数据隐藏

class Person {
   private int age;
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
}
class Main {
   public static void main(String[] args) {
      Person p1 = new Person();
      p1.setAge(24);
      System.out.println("Minha idade é ", + p1.getAge());
   }
}

Saída de dados

Minha idade é 24

No exemplo acima, temos um campo privado age. Porque é privado, não pode ser acessado do exterior da classe. Para acessar age, usamos métodos públicos getAge() e setAge(). Esses métodos são chamados de getter e setter.

Se tentar acessar o campo age a partir da classe Main,会出现 uma mensagem de erro.

p1.age = 24;     // error: age has private access in Person

Definir age como privado pode limitar o acesso não autorizado de fora da classe. Isso é ocultação de dados.

Exemplo2:使用 protected 数据隐藏

class Person {
 protected String profession;
 protected void displayInfo() {
   System.out.println("I am a ", + profession);
 }
}
class Teacher extends Person {
   public static void main(String[] args) {
      Teacher t1 = new Teacher();
      t1.profession = "teacher";
      t1.displayInfo();
   }
}

Saída de dados

I am a teacher

No programa acima, criamos uma classe Person que contém os campos protegidos profession e o método protegido displayInfo().

Já acessamos esses membros a partir da classe Teacher (subclasse de Person).

Por que encapsular?

  • No Java, a encapsulamento pode ajudar a manter juntos os campos e métodos relacionados, tornando nosso código mais organizado e fácil de ler.

  • Isso ajuda a controlar as modificações de nossos campos de dados. Considere uma situação em que desejamos que o campo age da classe seja um número não negativo. Aqui, podemos definir age como privado e aplicar lógica dentro do método setAge(). Por exemplo,

class Person {
   private int age;
   public void setAge(int age) {
     if (age >= 0) {
        this.age = age;
     }
   }
}
  • Os métodos getter e setter fornecem acesso leitura ou escrita para nossos campos de classe. Por exemplo:

getName()   // Fornecer acesso apenas para leitura
setName()   //Fornecer acesso apenas para escrita
  • Isso ajuda a desacoplar os componentes do sistema. Esses componentes desacoplados podem ser desenvolvidos, testados e depurados de forma independente e simultânea. E, qualquer alteração em um componente específico não afetará outros componentes.

Ocultação de dados e Encapsulamento

As pessoas geralmente consideram a encapsulação como ocultação de dados, mas isso não é completamente correto.

A encapsulação é o ato de agrupar campos e métodos relacionados.Isso nos permite implementar a ocultação de dados.A encapsulação em si não é ocultação de dados.