zoukankan      html  css  js  c++  java
  • 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方法不可以在不同一个包中的其它类中被访问
          }
      }
      
  • 相关阅读:
    Mysql 免密码登录,修改密码及忘记密码操作
    CentOS 6.9 升级MySQL 5.6.36到5.7.18
    【转载】详解布隆过滤器的原理、使用场景和注意事项
    AssemblyVersion、AssemblyFileVersion、AssemblyInformationalVersion 区别
    为什么要有财务自由【转】
    CacheManager.Core
    雪花算法,生成分布式唯一ID
    监控
    什么是并行、并发, 两者的区别是什么
    Emit用法
  • 原文地址:https://www.cnblogs.com/Victor-Han/p/4861412.html
Copyright © 2011-2022 走看看