java中子類對父類中的私有變量和私有方法有擁有權無使用權


解釋的我覺得也到位:子類擁對父類的私有變量具有擁有權 但是不具有使用權。

 

再和以前學的東西聯系起來,總結如下:

 

1、不管父類中的成員變量是靜態的還是非靜態的,子類統統擁有(這里不用繼承概念)。

 

2、不管父類中的成員變量是被子類隱藏了還是沒有被子類隱藏,子類統統擁有

 

3、不管父類中的成員變量是私有的還是其他,子類統統擁有,但是私有的不能被子類直接訪問,只能通過從父類中繼承的set和get方法來訪問。就像上面那句話說的那樣,對父類的私有變量具有擁有權,但是不具有使用權,只能通過從父類中繼承的set和get方法來使用。

 

今天看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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM