jizizh

当存在多包,子包,继承等时。为了保护类、变量、方法体、构造体的访问,所以有了访问控制修饰符。

一、访问控制修饰符

  • default(默认,什么都不写):对同一包内的类与子孙类可见,对其他包的类与子孙类不可见。
  • public:对同一包与不同包都能访问。
  • private:只对当前类可见。对同一包与不同包的其他类不可见。
  • protected:接下来重点解释下。

二、protected的使用

1、创建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:

javac -d . ProtectedTest.java 

2、创建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.java

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

结果如下:

可以得出:在同一包内的任何其他类都能访问被声明为protected的对象、方法、构造体、变量。

3、创建ProtectedTestThree.java

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方法。

三、注意点

  • 父类中声明为 public 的方法在子类中只能声明为 public。
  • 父类中声明为 protected 的方法在子类中不能声明为 private。
  • 父类中声明为 private 的方法,不能够被继承。
  • private与protected修饰符不能修饰类。

分类:

技术点:

相关文章: