zoukankan      html  css  js  c++  java
  • Java笔记: protected的真正含义

    关于protected关键字,即使是Java初学者也能够说出它的含义:protected修饰的成员可以被子类访问。但是这样理解并不完全准确,下面考虑它的真正含义。

    Java访问控制回顾

    Java语言定义的访问级别有private、package、protected、public,从前往后访问权限依次扩大。protected和public成员可能被其他包访问,因此被认为是契约的一部分。其他三种访问都容易理解,而protected与继承有关,因此需要稍微注意。

    简单示例

    考虑如下Java程序,Zu、Fu、Zi(祖、父、子)分别定义在a、b、c三个包中,且Zu->Fu->Zi。Fu分别访问了来自this、Fu、Zu、Zi的protected成员age。那么下面test哪个能通过编译,哪个不能?

    package a;
    
    public class Zu {
    	protected int age = 67;
    }
    
    package b;
    
    import a.Zu;
    import c.Zi;
    
    public class Fu extends Zu {
    	
    	private void test1() {
    		System.out.println(this.age);
    	}
    
    	private void test2(Fu f) {
    		System.out.println(f.age);
    	}
    
    	private void test3(Zu z) {
    		System.out.println(z.age);
    	}
    
    	private void test4(Zi z) {
    		System.out.println(z.age);
    	}
    }
    
    package c;
    
    import b.Fu;
    
    public class Zi extends Fu {
    	
    }
    

    真正含义

    准确的讲,一个受保护的成员除了可以被自身以及同一个包的类访问之外,还可以通过对象引用访问,只要满足访问者类型比引用类型“宽”(同一类型或者父类)。

    根据上述规则,test1、test2访问和被访问者类型都是Fu,因此编译通过。test4访问者是Fu,被访问者是Zi,Fu是Zi的父类,因此编译通过。只有test3中被访问的引用为Zu,不是Fu的子类,因此编译不通过,规则掌握之后就很简单了。

  • 相关阅读:
    使用watch定时执行命令并显示结果
    LVS配置
    myeclipse通过查询源码查询方法
    导入struts2框架项目无法运行tomcat
    解决eclipse/myeclipse导入项目时出现红色叹号的方法
    my/eclipse中的debug调试
    导入项目后servlet报错
    转到Servlet出现500型错误
    关于快捷键导包失败
    关于jsp找不到servlet
  • 原文地址:https://www.cnblogs.com/cocode/p/12275093.html
Copyright © 2011-2022 走看看