再学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();
}
}
再学Java 之 private、protected、public和default的作用域的更多相关文章
- private,protected,public和default的区别
private,protected,public和default的区别 除了default以外,其他都是Java语言的关键字.default代表的是对类成员没有进行修饰的情况.它本身也代表了一种访问控 ...
- Java中的private protected public和default的区别
转至:http://blog.sina.com.cn/s/blog_74c571240101jaf5.html 类内部 本包 子类 外部包 public √ √ √ √ pro ...
- Java关键字(一) 修饰符private、protected、public和default的作用域
我们经常用着四种修饰符去修饰变量.方法和类,但是这四种的作用域都一样吗? 其中private和public可能是最多人知道的,但是protected和default可能就不知道其具体的作用域是哪些范围 ...
- 再学Java 之 interface的成员变量
前言:最近在学多线程,写“哲学家就餐问题(Dining Philosophers)”的时候,需要定义一个全局的变量,即哲学家的人数.常用的做法是在其中一个类中定义一个static final的变量,然 ...
- @private@protected@public@package
@private@protected@public@package 为了强制一个对象隐藏其数据,编译器限制实例变量范围以限制其在程序中的可见性 但是为了提供灵活性,苹果也让开发者显式设置范围(四选一) ...
- oc 中四种实例变量的范围类型@private@protected@public@package
To enforce the ability of an object to hide its data, the compiler limits the scope of instance vari ...
- iOS中四种实例变量的范围类型@private@protected@public@package
文档上记录是这样的 The Scope of Instance Variables Toenforce the ability of an object to hide its data, the c ...
- 对private protected public的详解:
#include <iostream> #include <stack> #include <queue> #include <exception> # ...
- 【Java】abstract,final,static,private,protected,public的区别
[abstract]抽象的 1. abstract可以修饰类和成员方法,被abstract修饰的类称为抽象类,被abstract修饰成员方法叫抽象方法.抽象类不一定有抽象方法,但拥有抽象方法的类一定是 ...
随机推荐
- String、StringBuffer与StringBuilder之间区别(转)
最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下. 关于这三个类在字符串处理中的位置不言而喻,那 ...
- 什么是DNS服务器
DNS:是做域名解析的.我们平时所输入的网址,都是某台服务器的主机名,比如www.BAIDU.COM,主机之间通讯是通过IP地址访问的,这个是有需要某个机制,把地址解析成名字,因为IP地址是一串数字, ...
- RabbitMQ添加rabbitmqadmin和其使用方法(类似Redis的redis-cli)
一:先进入rabbitmq的安装目录下的bin目录,执行wget -c http://localhost:15672/cli/rabbitmqadmin:(前提是plugin management已经 ...
- python文件操作,读取,修改,合并
# -*- coding:utf-8 -*- ''' 从11c开始提取 ''' import re import numpy as np import os year = '17A' ss=" ...
- 小强 ROS 机器人教程
首先请您自行依据线标提示将小强接线连接好,完整结构如下两图所示: 小强是属于Turtlebot机器人.它由底盘.主机.Kinect相机(通过USB连接主机)组成,没有显示屏.如果要通过显示器查看主机的 ...
- cuDNN
https://developer.nvidia.com/developer-program https://developer.nvidia.com/cudnn cuda和cuDNN的关系 http ...
- OpenGL模型视图变换、投影变换、视口变换的理解
OpenGL中不设置模型,投影,视口,所绘制的几何图形的坐标只能是-1到1(X轴向右,Y轴向上,Z轴垂直屏幕向外). 产生目标场景的过程类似于用照相机进行拍照: (1)把照相机固定在三角架上,并让他对 ...
- Java菜鸟学习笔记(23)--继承篇(二):继承与组合
组合是什么 1.继承和组合都是一种随思想渗透而下的编码方式,其根本目的都是为了复用类,减少重复代码 2.要实现一个类的复用,可以分为组合语法和继承语法 3.组合就是通过将一个对象置于一个新类中,将其作 ...
- ORACLE EBS xml publisher 报表输出字符字段前部"0"被EXCEL自动去掉问题
http://www.cnblogs.com/lzsu1989/archive/2012/10/17/2728528.html Oracle EBS 提供多种报表的开发和输出形式,由于MS Ex ...
- 【WinRT】使用 T4 模板简化字符串的本地化
在 WinRT 中,对控件.甚至图片资源的本地化都是极其方便的,之前我在博客中也介绍过如何本地化应用名称:http://www.cnblogs.com/h82258652/p/4292157.html ...