Java中的封装(公共成员变量)

时间:2015-06-02 12:33:13

标签: java encapsulation

任何人都可以在java中提供一个示例,其中未实现Encapsulation及其影响。

我知道成员变量的包装及其方法是封装。 此外,它表示不应将成员变量声明为公共(大多数情况下),以便它们不会暴露,因为任何人都可以将这些值用于这些字段,并且可能与其他用户冲突。

现在,即使我们将成员变量声明为public,也会为该类的每个实例(对象)分配不同的内存。即使用户直接设置变量而不使用setter和getter,它也不会影响其他用户因为他分配了不同的内存,对吗?那怎么能造成冲突?

唯一的情况是,如果稍后需要更改,例如验证等,则必须相应地更改类。所以,如果有人可以举例说明一个场景(使用java代码)而不是上面没有实现封装的场景及其影响吗?

2 个答案:

答案 0 :(得分:0)

  

封装可以被描述为防止的保护屏障   由定义的其他代码随机访问的代码和数据   课外。严格控制对数据和代码的访问   通过界面。

     

封装的主要好处是能够修改我们的   实现代码而不破坏使用我们代码的其他人的代码。   有了这个功能,封装提供了可维护性,灵活性和   我们代码的可扩展性。

  

封装的好处:

     
      
  • 班级可以完全控制其字段中存储的内容。
  •   
  • 类的字段可以是只读的或只写的。
  •   
  • 类的用户不知道类如何存储其数据。一个   class可以更改字段的数据类型和类的用户   不需要改变任何代码。
  •   

来自:http://www.tutorialspoint.com/java/java_encapsulation.htm

答案 1 :(得分:0)

就像一个基本的例子:

public class ArrayIter{
    public int at = 0;
    public Object[] arr;

    public ArrayIter(Object[] arr){
        this.arr =  arr;
    }

    public Object next(){
        if(at >= arr.length)
            return null;

        return arr[at++];
    }
}

现在让我们假设两个对象可以访问此类的同一个实例。现在这将是一个有效的操作:

ArrayIter iter = getArrIter();
iter.arr = null;

一旦调用NullPointerException,这将导致意外行为(getArrIter().next()准确)。