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修饰符不能修饰类。
相关文章
相关标签/搜索