誰告訴你,該對象的單個屬性應該是私有的是絕對正確的!
OOP的基本原理之一是Encapsulation。簡而言之,這意味着對象的內部結構(「字段」)應該隱藏起來。這是面向對象的最重要的方面,OOP的大多數優點都來自它。
現在,存取方法(getter和setter方法)破壞封裝,以同樣的方式只是讓他們做公衆,因爲你不再隱藏了內部結構。它不僅僅是保護內部字段,它是關於他們隱藏。
不幸的是,accessor方法是Java(和C#)中常見的習慣用法,但如果你對於學習OOP非常認真,你應該不惜一切代價避免它們!後來,當你有更多的經驗時,你可能在少數情況下會例外,但我現在敦促你避開它們。避免項目龍目島,並避免IDE功能自動生成的東西。
Here是來自Allen Holub的關於這個問題的精彩文章。
回到你的實際問題:是的,你聲明你的字段是私人的,但你根本沒有爲他們定義setter/getters。我們所做的是考慮對象應該具備哪些職責/特徵/功能/邏輯。
因此,不要考慮統計數據,想想什麼你正在使用這些統計數據。面向對象的英雄可能是這樣的,那麼:
public final class Hero {
private int hp;
private int strength;
private int agility;
private int armor;
...
public void dealDamageTo(Hero other) {
other.takeDamage(stength);
}
public void takeDamage(int damage) {
hp = hp - Math.max(0, damage-armor);
}
...
}
當然,這只是一個例子,但你可能明白了吧。如果你的設計是正確的,根本不需要發佈內部字段。
Eclipse>右鍵單擊>源代碼>生成getter和setters>全選>完成 – Marvin
哦,我正在使用IntelliJ。這個功能也有嗎? @Marvin – Huzo