今天看spring源碼,不經意間發現了一問題:在一個抽象類中定義了一個私有成員變量。
仔細想想:抽象類不能被實例化的,只能被子類繼承。但是自從學java的繼承只有,我們就知道,子類不能繼承父類的私有成員變量或方法的。
問題:在該抽象方法中定義這個私有變量有什么用呢?或者說這個私有成員變量再什么地方用得到呢?
所以自己做了一個測試如下:
public abstract class Fatherclass { private int privatenumber; public int getPrivatenumber() { return privatenumber; } public void setPrivatenumber(int privatenumber) { this.privatenumber = privatenumber; } } public class Childclass extends Fatherclass{ public static void main(String[] args) { Childclass childclass=new Childclass(); Childclass1 childclass1=new Childclass1(); childclass.setPrivatenumber(125); System.out.println(childclass.getPrivatenumber()); System.out.println(childclass1.getPrivatenumber()); } } public class Childclass1 extends Fatherclass { }
運行結果如下:
125 0
通過測試,我們發現子類確實繼承了父類的私有屬性(也可以說是子類擁有一個屬性,繼承自父類,但是該屬性的訪問權限暫時不確定),但是我們無法通過子類直接訪問該(繼承自父類私有屬性)的屬性。我暫且該這種屬性的訪問權限起名為fatherprivate(意為繼承自父類私有屬性)
通過瀏覽博客,發現一篇博客對上面情況總結的很好:http://blog.csdn.net/frank_jb/article/details/42739785