簡體   English   中英

為什么我可以從 Class 外部訪問私有變量?

[英]Why Can I Access Private Variable From Outside Class?

我的任務是找出如何查看但不編輯來自另一個 class 的私有 int。 我嘗試了一些過於復雜的事情,但有效的是:

public int getC() { 
return myC; 
 }

myC 是一個私有整數。 讓另一個 class 訪問私有變量真的這么容易嗎? 我以為他們不能分享。 有人可以解釋為什么允許這樣做嗎? 謝謝。

您創建了一個公共getter function 來訪問私有變量。 因此,如果另一個 class 將您的 class 的實例作為其局部變量,它可以使用公共函數(getter)來訪問原始 class 的私有變量。

公開私有字段的唯一方法是通過accessors又名getters

但是你應該遵循兩條規則:

  • 避免通過 getter(ide 快捷方式)直接公開所有私有字段的誘惑。 僅在確實需要時添加它們。

  • 如果您公開的類型不是不可變的,請注意不要通過返回防御性副本來escape references

示例:

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

這段代碼破壞了封裝,它和這樣做是一樣的。

public Date date;

要解決這個問題,您有 2 個解決方案

  • 返回您約會對象的防御性副本
public Date date() {
   return new Date(date.getTime());
}
  • 使用不可變版本的 Date -> LocalDate

相同的邏輯適用於集合類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM