Java 訪問控制修飾符

當存在多包,子包,繼承等時。爲了保護類、變量、方法體、構造體的訪問,因此有了訪問控制修飾符。java

1、訪問控制修飾符bash

  • default(默認,什麼都不寫):對同一包內的類與子孫類可見,對其餘包的類與子孫類不可見。
  • public:對同一包與不一樣包都能訪問。
  • private:只對當前類可見。對同一包與不一樣包的其餘類不可見。
  • protected:接下來重點解釋下。

2、protected的使用spa

一、建立ProtectedTest.java對象

package com.protectedtest;
public class ProtectedTest {
    protected void test(){
        System.out.println("my is father protected method");
    }
    public static void main(String []args) {
        System.out.println("test start !");
    }                                                                                                                                                                                                        
}

這裏對方法test()用protected來修飾。而後編譯ProtectedTest.java:blog

javac -d . ProtectedTest.java 

二、建立ProtectedTestTwo.java繼承

package com.protectedtest;
public class ProtectedTestTwo extends ProtectedTest{
    public static void main(String[] args){
        /* 子類實例能夠訪問自身繼承的test方法 */
        ProtectedTestTwo getTest = new ProtectedTestTwo();
        getTest.test();
        /* 子類能夠訪問父類實例的test方法 */                                                                                                                                                                 
        ProtectedTest getTest2 = new ProtectedTest();
        getTest2.test();
    }
}

運行ProtectedTestTwo.javathree

javac -d . ProtectedTestTwo.java
java com.protectedtest.ProtectedTestTwo

結果以下:get

能夠得出:在同一包內的任何其餘類都能訪問被聲明爲protected的對象、方法、構造體、變量。編譯

三、建立ProtectedTestThree.javaclass

package com.protectedtestthree;
import com.protectedtest.ProtectedTest;
public class ProtectedTestThree extends ProtectedTest{
    public static void main(String[] args){
        /* 子類實例能夠訪問自身繼承的test方法!*/
        ProtectedTestThree getTest = new ProtectedTestThree();
        getTest.test();
        /* 編譯會錯誤! 子類不能夠訪問父類實例的test方法!
        ProtectedTest getTest2 = new ProtectedTest();
     getTest2.test(); */
} }

運行ProtectedTestThree.java

javac -d . ProtectedTestThree.java 
java com.protectedtestthree.ProtectedTestThree

結果以下:

能夠看到子類實例能夠訪問自身繼承的test方法,而不能直接訪問父類的實例的test方法。

3、注意點

  • 父類中聲明爲 public 的方法在子類中只能聲明爲 public。
  • 父類中聲明爲 protected 的方法在子類中不能聲明爲 private。
  • 父類中聲明爲 private 的方法,不可以被繼承。
  • private與protected修飾符不能修飾類。
相關文章
相關標籤/搜索