码迷,mamicode.com
首页 > 编程语言 > 详细

再学Java 之 private、protected、public和default的作用域

时间:2014-05-01 20:51:32      阅读:473      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   tar   ext   javascript   width   color   get   

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

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

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

 

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

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

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

bubuko.com,布布扣

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

bubuko.com,布布扣
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(){ }
    
}
bubuko.com,布布扣

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

bubuko.com,布布扣
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();
    }
}
bubuko.com,布布扣

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

bubuko.com,布布扣
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();
    }
}
bubuko.com,布布扣

 

再学Java 之 private、protected、public和default的作用域,布布扣,bubuko.com

再学Java 之 private、protected、public和default的作用域

标签:style   blog   class   code   java   tar   ext   javascript   width   color   get   

原文地址:http://www.cnblogs.com/scutwang/p/3702653.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!