• Java-protected的使用范围


    protected的使用范围

    类NewObject中有protected修饰的方法或者属性,则:

    • 同一个包中:

      1. 可在同一个包里的子类中实例化NewObject类获得对象,然后可用该对象访问protected修饰的方法或者属性,即.操作访问。
      2. 可在同一个包里的非子类中实例化NewObject类获得对象,然后可用该对象访问protected修饰的方法或者属性。
      3. 可在同一个包里的非子类中实例化NewObject类的子类(该子类和NewObject类在同一个包中)获得对象,然后可用该对象访问protected修饰的方法或者属性。
      4. 可在同一个包里的NewObject类的子类中调用NewObject类中protected修饰的方法或者属性,即protected修饰的方法和属性可被同一个包中的子类继承。
    • 非同一个包中:

      1. 可在非同一个包里的子类中实例化NewObject类获得对象,但无法用该对象问protected修饰的方法或者属性。
      2. 可在非同一个包里的非子类中实例化NewObject类获得对象,但无法用该对象问protected修饰的方法或者属性。
      3. 可在非同一个包里的非子类中实例化NewObject类的子类(该子类和NewObject类不在同一个包中)获得对象,但无法用该对象问protected修饰的方法或者属性。
      4. 可在非同一个包里的NewObject类的子类中调用NewObject类中protected修饰的方法或者属性,即protected修饰的方法和属性可被不同一个包中的子类继承。

    package 1:

    1. BaseClass:

      package package_1;
      // 相当于NewObject类
      public class BaseClass {
          // protected方法
          protected void protectedMethod() {
              System.out.println("This is BaseClass");
          }
      
      }
      
    2. SubClass:

      package package_1;
      
      public class SubClass extends BaseClass {
      }
      
    3. MainClass:

      package package_1;
      
      public class MainClass {
          public static void main(String[] args) {
              BaseClass b1 = new BaseClass();
              SubClass s1 = new SubClass();
              b1.protectedMethod(); // 父类的protected方法可在同一个包中的其它类中被访问
              s1.protectedMethod(); // 子类中继承了父类的protected方法
          }
      }
      

    package 2:

    1. SubClass:

      package package_2;
      
      import package_1.BaseClass;
      // 继承了不在同一个包中的父类 BaseClass
      public class SubClass extends BaseClass {
          public void testMesthod(){
              BaseClass b1 = new BaseClass();
              b1.protectedMethod(); // 编译器报错。父类的protected方法不可以在不同一个包中的子类中被访问
              this.protectedMethod(); // 子类继承了父类protected方法
          }
      }
      
    2. MainClass:

      package package_2;
      
      import package_1.*;
      
      public class MainClass {
          public static void main(String[] args) {
              BaseClass b1 = new BaseClass();
              b1.protectedMethod(); // 编译器报错。父类的protected方法不可以在不同一个包中的其它类中被访问
              SubClass s1 = new SubClass();
              s1.protectedMethod(); // 编译器报错。子类的protected方法不可以在不同一个包中的其它类中被访问
          }
      }
      
  • 相关阅读:
    (OK) Fedora 24 开机自动启动脚本
    (OK)(OK) houshoul experiment
    centos-quagga-ospf6d.conf
    使用 Quagga 将你的 CentOS 变成 OSPF 路由器
    docker中安装quagga
    (OK) paper-5_mobicom_acm_latex.txt
    (OK) Latex
    Latex的几种参考文献排序
    Inkscape Tutorial Effects: Placing an Image Inside a Shape – Part 2
    Latex中图形的引用和插入
  • 原文地址:https://www.cnblogs.com/Victor-Han/p/4861412.html
Copyright © 2020-2023  润新知