2016-08-01 99 views
1

比方說,我有一個Dog類,它有一個字段private final int age和一個方法public Dog ageBy(Time time),它每次調用時都返回一個狗的新實例。一個Dog類不僅是不可變的,但沒有任何get方法返回它的年齡,換句話說狗的合同不允許他說他的年齡(爲什麼?因爲沒有說話的狗),他只能'樹皮','睡',並做其他狗的東西。如何在不暴露字段的情況下實現equals?

Dog可以比較其他狗的年齡。爲此,我需要在Dog類中覆蓋public equals(Object o)方法。但問題是,沒有辦法比較它,因爲我不能訪問通過的狗的年齡。

問題:如何在不暴露任何對象字段的情況下實現equals方法?

+3

所有'Dog'情況下訪問其他'Dog'實例的'private'領域。 – resueman

+0

謝謝,我不知道:) –

回答

5

任何方法都可以訪問同一個類的private字段,所以你可以寫入直接訪問字段的equals,而不需要getter。

下面是一個例子:

public class Point { 
    private int x; 
    private int y; 

    public Point (int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

    public boolean equals(Object obj) { 
     // Test for null, and type 
     ... 
     Point p = (Point) obj; 
     return x == p.x && y == p.y; 
    } 
2

一個對象可以訪問private同一類的其他對象的實例,所以你不需要在equals中的獲得者。

相關問題