2013-04-09 131 views
0

如果我在父類中有一堆字段都需要被子類繼承,那麼將子類嵌套在超類中會更好嗎?比私人還是使用受保護的訪問者?或者其他一些選擇?Java - 受保護的'getters'與嵌套類

+0

由於這很大程度上取決於您的用例,請您詳細說明一下嗎? – 2013-04-09 07:47:38

+0

定義「更好」。 – 2013-04-09 07:53:44

+0

我有一個超類(Employee),它擁有很多其子類(員工類型)以及一些工資/稅收計算方法(抽象和具體)通用的數據。這個子類做了大量的計算,它需要超類中字段的數據。只有很少的字段需要從這個類的外部訪問。 – 2013-04-09 07:56:24

回答

3

最簡單的解決方案是使超類字段或實例變量受到保護,但是,如果將它們設置爲私有,則可以始終通過getter和setter訪問它們,因爲它遵循封裝原則,因此概念上更好。

1

最簡單的解決方案似乎是讓這些字段受到保護,除非您有一個令人信服的理由不這樣做,否則就去做。

1

我認爲使用受保護的訪問器是最好的方法和更常見的方法。

1

如果你希望它可以被子類訪問,你只剩下兩個選項,public和protected。受保護的可能是你想要的。當您在java中使用extends關鍵字進行繼承時,下表適用。

   Access Levels 

Modifier Class Package Subclass World 
public  Y  Y  Y   Y 
protected Y  Y  Y   N 
no modifier Y  Y  N   N 
private  Y  N  N   N 

如果您在超類中發現了子類,那麼您也可以使用私有類。這是因爲內部類是父類的一部分,因此也可以訪問私有方法。

public class Parent { 
    private int x = 5; 

    //Not really a subclass 
    private class NestedClass { 
     public NestedClass() { 
      int hax = new Parent().x; // Works! 
     } 
    } 

    //More of a nestedclass than a subclass. 
    private class SubClass extends Parent { 
     public SubClass() { 
      int stillHax = new Parent().x; 
     } 
    } 
} 

你,直到你使用extendsimplements關鍵字不使用繼承,所以你可能希望有子類擴展父類(在不同的文件中)和變量會保護(或公共)級訪問。請注意,處於同一家庭或同一班級需要網格中的優秀。以上兩個例子的工作原因是SAME類中的其他類作爲父類。

只要按照網格,就是這樣。

1

有些情況下,暴露受保護的字段或受保護的訪問者方法是有意義的。所以這一切都取決於您的父類的設計,並且您希望子類如何使用您的父類。

但是,這是肯定的:「是否有更好的方式將子類嵌套在超類中」< - 這很少是正確的選擇。

+0

謝謝,我會記住它。 – 2013-04-09 08:34:49