为什么类外可以访问私有变量?

问题描述 投票:0回答:3

我的任务是找出如何查看但不编辑另一个类中的私有 int。我尝试了一些过于复杂的事情,但有效的是:

public int getC() { 
return myC; 
 }

myC 是一个私有整数。让另一个类访问私有变量真的那么容易吗?我以为它们不能共享。有人可以解释为什么这是允许的吗?谢谢。

java private
3个回答
1
投票

暴露私有字段的唯一方法是通过

accessors
又名
getters

但是你应该遵循 2 条规则:

  • 避免通过 getter(ide 快捷方式)直接公开所有私有字段的诱惑。仅在确实需要时添加它们。

  • 如果您暴露的类型不是不可变的,请不要通过返回防御副本来处理

    escape references

示例:

private Date date;
public Date date() {
   return date;
}

这段代码破坏了封装性,和这样做是一样的。

public Date date;

要解决这个问题,你有 2 个解决方案

  • 归还约会对象的防御性副本
public Date date() {
   return new Date(date.getTime());
}
  • 使用日期的不可变版本 ->
    LocalDate

相同的逻辑适用于集合类型。


0
投票

您创建了一个 public getter 函数来访问私有变量。因此,如果另一个类将您的类的实例作为其局部变量,它可以使用 public 函数(getter)来访问原始类的 private 变量。


-1
投票
class Rectangle:
  def __init__(self, width, height):
    self.__width = width
    self.__height = height
  def area(self):
    return self.__width * self.__height
© www.soinside.com 2019 - 2024. All rights reserved.