本文介绍了封装与普通的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果下面的代码会产生相同的结果,为什么我应该使用封装?

不用封装就可以使用此好处吗?因为每个对象的字段都彼此不同。

But I can use this benefit whithout using encapsulation right? because every object's field differs from each other's field.

// Person.java
public class Person {
  // Plain
  public String name;

  // Uses encapsulation
  private String name2;
  public void setName(String name2) {
    this.name2 = name2;
  }
  public String getName() {
    return name2;
  }
}

// Main.java
public class Main() {
  public static void main(String[] args) {
    // Plain
    Person person = new Person();
    person.name = "Jordan";
    System.out.println(person.name);

    // Uses encapsulation
    Person person2=new Person();
    person2.setName("Jordan");
    System.out.println(person2.getName());
  }
}


推荐答案

您的这个问题很有趣。我会尽力为您解答。

Your question is quite interesting. I will try to answer it to you in-depth.

封装背后的主要思想是隐藏数据及其实现详细信息用户。如果我们将数据成员设为私有,则只能在同一类中访问它。没有其他类可以直接访问该数据。

The main idea behind encapsulation is to hide the data and its implementation details from other users. If we make a data member private then it can only be accessed within the same class. No other class can ever access that piece of data directly.

但是我们可以定义一个接口,即public getter和setter方法来更新其他类中的数据。这样可确保其他人无法访问私有数据,并且只能由您提供的公共方法访问。

But we can define an interface, i.e. public getter and setter methods to update the data from other classes. This ensures that the private data remains inaccessible to others and can only be accessed by the public methods you provide.

例如,您可以决定只为特定数据成员提供getter方法,而不提供setter方法。这样可以确保其他任何类都无法以任何可能的方式更改或更新您的数据成员。他们只能使用getter方法获得值。

这就是为什么封装也称为数据隐藏的原因。

This is why encapsulation is also known as Data Hiding.

public class EncapsulationDemo{
    private int ssn;
    private String empName;
    private int empAge;

    //Getter and Setter methods
    public int getEmpSSN(){
        return ssn;
    }

    public String getEmpName(){
        return empName;
    }

    public int getEmpAge(){
        return empAge;
    }

    public void setEmpAge(int newValue){
        empAge = newValue;
    }

    public void setEmpName(String newValue){
        empName = newValue;
    }

    public void setEmpSSN(int newValue){
        ssn = newValue;
    }
}
public class EncapsTest{
    public static void main(String args[]){
         EncapsulationDemo obj = new EncapsulationDemo();
         obj.setEmpName("Mario");
         obj.setEmpAge(32);
         obj.setEmpSSN(112233);
         System.out.println("Employee Name: " + obj.getEmpName());
         System.out.println("Employee SSN: " + obj.getEmpSSN());
         System.out.println("Employee Age: " + obj.getEmpAge());
    }
}



优势



1)它为代码提供灵活性,并使其易于维护。。我们可以更改 getEmpName()的实现 code>或 setEmpName()而不影响任何其他外部代码。

Advantages

1) It provides flexibility to the code and makes it easily maintainable. We can change the implementation of getEmpName() or setEmpName() without affecting any other outside code.

2)我们可以制作数据成员只读(仅通过定义getter)或只写(仅通过定义setter)。

2) We can make data members read-only (by only defining getters) or write-only (by only defining setters) anytime.

3)其他用户将不知道幕后发生的事情。他们只会知道,要更新数据,我们需要调用settter方法并获取数据,而我们需要调用getter方法。

3) Other users will not be knowing what is going on behind-the-scenes. They will only know that to update a data, we need to call the settter methods and to get a data we need to call the getter emthods.

这篇关于封装与普通的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 22:02