任何人都可以在java中提供一个示例,其中未实现Encapsulation及其影响。
我知道成员变量的包装及其方法是封装。 此外,它表示不应将成员变量声明为公共(大多数情况下),以便它们不会暴露,因为任何人都可以将这些值用于这些字段,并且可能与其他用户冲突。
现在,即使我们将成员变量声明为public,也会为该类的每个实例(对象)分配不同的内存。即使用户直接设置变量而不使用setter和getter,它也不会影响其他用户因为他分配了不同的内存,对吗?那怎么能造成冲突?
唯一的情况是,如果稍后需要更改,例如验证等,则必须相应地更改类。所以,如果有人可以举例说明一个场景(使用java代码)而不是上面没有实现封装的场景及其影响吗?
答案 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()
准确)。