zoukankan      html  css  js  c++  java
  • 再学Java 之 private、protected、public和default的作用域

    前言:如果提到protected的访问控制级别,您的第一反应是”只能是子类才可以访问“,那么您很可能需要往下看。

    首先,大致介绍一下各个访问控制符的访问控制级别(具体的介绍很多大牛的博文都有介绍,我就不细说了,可以点击 这里 查看),如下图:

      private default protected public
    同一个类中
    同一个包中  
    子类中    
    全局范围内      

    在这里,很多人都存在一个误区,就是,认为protected修饰的方法只能在子类中才能访问,其他情况下不行;事实上,正确的表述方式应该是”如果在同一个包,则protected修饰的成员都可以被访问到;假如不在同个包,则只有子类才能访问到“。

    下面写一个实例(也可以到 这里 下载):

    (1)首先是程序的结构,这里,有两个包,分别有com.harvin包含parent和child类;com.other包含other_child类

    (2)com.harvin.Parent类的代码:

    package com.harvin;
    /*
     * @author harvin
     */
    public class Parent {
        
        public static void main(String[] args){
            
        }
        
        private   void private_method() {    }
        protected void protected_method() {    }
                  void default_method(){ }
        public    void public_method(){ }
        
    }

    (3)com.harvin.child类代码:

    package com.harvin;
    
    public class Child{
        private   void private_method() {
            //这里会报错。因为private修饰的成员,其他类均不可访问
            new Parent().private_method();
        }
        protected void protected_method() {
            //同一个包内,不过是不是子类,都可以访问到protected成员
            new Parent().protected_method();
        }
        void default_method(){
            //同一个包内,也可以访问
            new Parent().default_method();
        }
        public      void public_method(){
            new Parent().public_method();
        }
    }

    (4)com.other.other_child类的代码:

    package com.other;
    import com.harvin.*;
    
    public class Other_child extends Parent{
        private   void private_method() {
            //这里会报错。因为private修饰的成员,其他类均不可访问
            super.private_method();
        }
        protected void protected_method() {
            //这里会报错。不在同一个包内,但是是parent的子类,所以可以访问
            super.protected_method();
        }
        void default_method(){
            //这里会报错。不在同一个包内,不可以访问
            super.default_method();
        }
        public      void public_method(){
            super.public_method();
        }
    }
  • 相关阅读:
    51nod 1102 面积最大的矩形 (单调栈)
    Loj 6280 数列分块入门 4
    Loj 6279 数列分块入门 3
    python 自己写package 导入 attempted relative import beyond top-level package
    Python __pycache__ 含义
    Hive 中 null 和N 的处理
    【shell】 shell 敏捷开发
    RPC 讲解
    neo4j 应用
    【Linux】 查看CPU占用
  • 原文地址:https://www.cnblogs.com/scutwang/p/3702653.html
Copyright © 2011-2022 走看看