zoukankan      html  css  js  c++  java
  • Java的protect修饰限制

    1. 简介

    对protected修饰符进行阐述,结合Object类的clone方法进行说明。其中clone方法如下:protected Object Object.clone();

    关于protected修饰符的访问权限如下:

    • 子类与基类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问;

    • 子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,子类不能访问基类实例的protected方法。

    2. 示例

    2.1 示例1

    复制代码
     1 package modify.pack1;
     2 public class FaObject1 {
     3     protected void sp(){
     4         System.out.println("father method");
     5     }
     6 }
     7 
     8 
     9 package modify.pack1;
    10 public class SonObject1 extends FaObject1{
    11     public static void main(String[] args){
    12 
    13         SonObject1 sb1 = new SonObject1();
    14         sb1.sp();          //  (1)
    15 
    16         FaObject1 fb = new FaObject1();
    17         fb.sp();          //   (2)
    18     }
    19 }
    20 
    21 
    22 package modify.pack2;
    23 import modify.pack1.FaObject1;
    24 public class SonObject2 extends FaObject1 {
    25     public static void main(String[] args){
    26 
    27         SonObject2 sb2 = new SonObject2();
    28         sb2.sp();             //  (3)
    29 
    30         FaObject1 fb = new FaObject1();
    31 //        fb.sp();            //  (4)编译错误
    32     }
    33 }
    34 
    35 
    36 package modify.pack2;
    37 import modify.pack1.FaObject1;
    38 public class UnrelatedObject {
    39     public static void main(String[] args){
    40         
    41         FaObject1 fb = new FaObject1();
    42 //    fb.sp();       // (5) 编译错误
    43     }
    44 }
    复制代码

    解释说明如下:

    (1)FaObject1和SonObject1在同一个包内,子类实例可以访问自身继承的sp方法,编译通过;

    (2)FaObject1和SonObject1在同一个包内,子类可以访问父类实例的sp方法,编译通过;

    (3)FaObject1和SonObject2不在同一个包内,子类实例可以访问自身继承的sp方法,编译通过;

    (4)FaObject1和SonObject2不在同一个包内,子类不可以访问父类实例的sp方法,编译错误;

    (5)FaObject1和UnrelatedObject不在同一个包内,该类不可以访问其他类实例的protected方法,编译错误;

     2.2 示例2

    复制代码
     1 package modify.pack3;
     2 public class FaObject3 {
     3     public static void main(String[] args){
     4 
     5         FaObject3 fb3 = new FaObject3();
     6         try {
     7             fb3.clone();      // (1)
     8         }
     9         catch (CloneNotSupportedException e) {
    10             e.printStackTrace();
    11         }
    12 
    13         SonObject3 sb3 = new SonObject3();
    14         try {
    15             sb3.clone();      // (2)
    16         }
    17         catch (CloneNotSupportedException e) {
    18             e.printStackTrace();
    19         }
    20     }
    21 }
    22 
    23 
    24 package modify.pack3;
    25 public class SonObject3 extends FaObject3{
    26     public static void main(String[] args){
    27 
    28         SonObject3 sb3 = new SonObject3();
    29         try {
    30             sb32.clone();      // (3)
    31         }
    32         catch (CloneNotSupportedException e) {
    33             e.printStackTrace();
    34         }
    35 
    36         FaObject3 fb3 = new FaObject3();
    37 //        fb3.clone();       // (4) 编译错误
    38     }
    39 }
    复制代码

    (1)Object和FaObject3不在同一个包内,子类实例可以访问继承Object类的clone方法,编译通过;

    (2)FaObject3和SonObject3在同一个包内,子类实例可以访问继承FaObject3类的clone方法,编译通过;

    (3)FaObject3和SonObject3在同一个包内,子类实例可以访问继承FaObject3类的clone方法,编译通过;

    (4)fb3的clone方法来自于Object类,该方法的可见性为java.lang包和Object类的FaObject3子类,对于SonObject3类不可见,因此编译错误;

    !!!

     
     
  • 相关阅读:
    Codeforces Round #581 (Div. 2)
    Codeforces Round #605 (Div. 3)
    cin,cin.get(),cin.getline(),getline()
    容斥原理原理
    词法分析器
    Web学习开始。
    Convex hull凸包
    对max_flow做一个总结
    Vue中动画封装
    Vue中的动画特效
  • 原文地址:https://www.cnblogs.com/SuperZDK/p/13976917.html
Copyright © 2011-2022 走看看