从实例角度分析java的public、protected、private和default访问权限
一、public
同一个package
1.本类内部
- public class A {
- public int f=1;
- public void m1() {}
- public void m2() {
- f=2; //类内部正常访问
- m1(); //类内部正常访问
- }
- }
2.子类
- package same;
- public class A {
- public int f=1;
- public void m1() {}
- }
- package same;
- public class B extends A {
- public void m2() {
- f=2; //调用父类的public成员变量
- m1(); //调用父类的public成员方法
- }
- }
3.其它类通过类对像访问对像成员
- package same;
- public class A {
- public int f=1;
- public void m1() {}
- }
- package same;
- public class B {
- public static void main(String[] args) {
- A a =new A();
- a.f=2; //同一个包内 对类A的对像里面的public成员变量访问
- a.m1(); //同一个包内 对类A的对像里面的public成员方法访问
- }
- }
不同package之间
1.子类
- package same;
- public class A {
- public int f=1;
- public void m1() {}
- }
- package other;
- import same.A;
- public class B extends A {
- public void m2() {
- f=2; //对类A的的public成员变量访问
- m1(); //对类A的的public成员方法访问
- }
- }
2.其它类通过类对像访问对像成员
- package same;
- public class A {
- public int f=1;
- public void m1() {}
- }
- package other;
- import same.A;
- public class B {
- public static void main(String[] args) {
- A a=new A();
- a.f=2; //不同包之间 对类A的对像里面的public成员变量访问
- a.m1(); //不同包之间 对类A的对像里面的public成员方法访问
- }
- }
二、protected
同一个package
1.本类内部
- package same;
- public class A {
- protected int f=1;
- protected void m1() {}
- public void m2() {
- f=2; //访问本类的protected成员变量
- m1(); //访问本类的protected成员方法
- }
- }
2.子类
- package same;
- public class A {
- protected int f=1;
- protected void m1() {}
- }
- package same;
- public class B extends A {
- public void m2() {
- f=2; //访问父类的protected成员变量
- m1(); //访问父类的protected成员方法
- }
- }
3.其它类通过类对像访问对像成员
- package same;
- public class A {
- protected int f=1;
- protected void m1() {}
- }
- package same;
- public class B {
- public void m2() {
- A a=new A();
- a.f=2; //访问A类对像的protected成员变量
- a.m1(); //访问A类对像的protected成员方法
- }
- }
不同package之间
1.子类
- package same;
- public class A {
- protected int f=1;
- protected void m1() {}
- }
- package other;
- import same.A;
- public class B extends A {
- public void m2() {
- f=2; //对类A的的protected成员变量访问
- m1(); //对类A的的protected成员方法访问
- }
- }
2.其它类通过类对像访问对像成员
- package same;
- public class A {
- protected int f=1;
- protected void m1() {}
- }
- package other;
- import same.A;
- public class B {
- public void m2() {
- A a=new A();
- //a.f=2; 无法对类A对像的protected成员变量访问
- //a.m1(); 无法对类A对像的protected成员变量方法
- }
- }
三、default
同一个package
1.本类内部
- package same;
- public class A {
- int f=1;
- void m1() {}
- public void m2() {
- f=2; //访问本类的default成员变量
- m1(); //访问本类的default成员方法
- }
- }
2.子类
- package same;
- public class A {
- int f=1;
- void m1() {}
- }
- package same;
- public class B extends A {
- public void m2() {
- f=2; //访问A类对像的default成员变量
- m1(); //访问A类对像的default成员方法
- }
- }
3.其它类通过类对像访问对像成员
- package same;
- public class A {
- int f=1;
- void m1() {}
- }
- package same;
- public class B {
- public void m2() {
- A a=new A();
- a.f=2; //访问A类对像的default成员变量
- a.m1(); //访问A类对像的default成员方法
- }
- }
不同package之间
1.子类
- package same;
- public class A {
- int f=1;
- void m1() {}
- }
- package other;
- import same.A;
- public class B extends A {
- public void m2() {
- //f=2; 无法对类A的default成员变量访问
- //m1(); 无法对类A的default成员变量方法
- }
- }
2.其它类通过类对像访问对像成员
- package same;
- public class A {
- int f=1;
- void m1() {}
- }
- package other;
- import same.A;
- public class B {
- public void m2() {
- A a=new A();
- //a.f=2; 无法对类A对像的default成员变量访问
- //a.m1(); 无法对类A对像的default成员变量方法
- }
- }
四、private
同一个package
1.本类内部
- package same;
- public class A {
- private int f=1;
- private void m1() {}
- public void m2() {
- f=2; //访问本类的private成员变量
- m1(); //访问本类的private成员方法
- }
- }
2.子类
- package same;
- public class A {
- private int f=1;
- private void m1() {}
- }
- package same;
- public class B extends A {
- public void m2() {
- //f=2; 无法访问A类的private成员变量
- //m1(); 无法访问A类的private成员方法
- }
- }
3.其它类通过类对像访问对像成员
- package same;
- public class A {
- private int f=1;
- private void m1() {}
- }
- package same;
- public class B {
- public void m2() {
- A a =new A();
- //a.f=2; 无法访问A类对像的private成员变量
- //a.m1(); 无法访问A类对像的private成员方法
- }
- }
不同package之间
1.子类
- package same;
- public class A {
- private int f=1;
- private void m1() {}
- }
- package other;
- import same.A;
- public class B extends A {
- public void m2() {
- //f=2; 无法对类A的private成员变量访问
- //m1(); 无法对类A的private成员变量方法
- }
- }
2.其它类通过类对像访问对像成员
- package same;
- public class A {
- private int f=1;
- private void m1() {}
- }
- package other;
- import same.A;
- public class B {
- public void m2() {
- A a=new A();
- //a.f=2; 无法对类A对像的private成员变量访问
- //a.m1(); 无法对类A对像的private成员变量方法
- }
- }
从实例角度分析java的public、protected、private和default访问权限的更多相关文章
- [学习笔记]Java的public,protected,private,缺省的作用域
0.引言 Java的访问指示符public,protected,private,缺省可以用来修饰类和方法. 1.作用域如下 具体如下: 作用域 当前类 同一package 子孙类 ...
- C++中public/protect/private三种访问权限控制
一.成员访问权限控制 1.public (1)public成员变量可以被成员函数访问 [访问性] (2)public成员可以被实体对象访问 [访问性] (3)public成员可以成为子类成员 [ ...
- C++:继承访问属性(public/protected/private)
• 公有继承(public) 公有继承在C++中是最常用的一种继承方式,我们先来看一个示例: #include<iostream> using namespace std; class F ...
- 从虚拟机指令执行的角度分析JAVA中多态的实现原理
从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧 ...
- JAVA修饰符类型(public,protected,private,friendly)
转自:http://www.cnblogs.com/webapplee/p/3771708.html JAVA修饰符类型(public,protected,private,friendly) publ ...
- JAVA类型修饰符(public,protected,private,friendly)
JAVA类型修饰符(public,protected,private,friendly) public的类.类属变量及方法.包内及包外的不论什么类均能够訪问:protected的类.类属变量及方法,包 ...
- php public protected private属性实例详解
php 类中函数和类变量都有三个属性:public protected private,具体什么时候使用什么属性好纠结,特意找了个实例,这样看起来更清晰. public 表示全局,类内部外部子类都可以 ...
- 004-对象——public protected private PHP封装的实例
<?php /** *public protected private PHP封装的实例 */ /*class tv { private $shengyin; function __constr ...
- 【转】C++易混知识点5:实例讲解Public Protected Private作用域,继承的区别和用意
大学生涯,涉及到类的作用域,继承都是用的public 共有继承,当时也没想那么多,觉得共有继承多方便,多简单,反正没有太多的限制,不管是类的成员或者是基类的成员函数都可以访问.没有深究.其实这里面真是 ...
随机推荐
- Python小白学习之路(二十五)—【装饰器的应用】
通过一个任务来加深对装饰器的理解和应用 回顾:装饰器的框架 def timmer(func): def wrapper(): func() return wrapper 任务:给以下正在运行的程序加一 ...
- defer 的常用场景
将panic的转化为error类型值,并将其作为函数值返回给调用方 package main import "fmt" func divide(a, b int) (res int ...
- vue教程3-04 vue.js vue-devtools 调试工具的下载安装和使用
vue教程3-04 vue.js vue-devtools vue调试工具的安装和使用 一.vue-devtools 下载与安装 1.需要 fan qiang 2.打开谷歌浏览器设置--->扩展 ...
- KVM的VPS主机在Centos6.x下修改系统时间
显示系统时间 # date "+%Y-%m-%d %H:%M:%S" 修改系统时区 # cp /usr/share/zoneinfo/Asia/Shanghai /etc/loca ...
- Java之ServiceLoader
转载请注明源出处:http://www.cnblogs.com/lighten/p/6946683.html 1.简介 JDK1.6之后,java.util包下多了一个类ServiceLoader,其 ...
- LSP劫持症状及解决方案
[症状] 1.网络连接正常,win7诊断显示无问题,但打开网页很迅速的显示该页无法显示,好像浏览器并没有提交任何url就做出了反应一样,输入其他网址,有时候也出现等候很久最终也是无法上网,firefo ...
- Google Chrome Native Messaging开发实录(二)Chrome Extension扩展
接上一篇<Google Chrome Native Messaging开发实录(一)背景介绍>的项目背景,话不多说,有关Chrome Extension介绍和文档就不展开了,直接上代码. ...
- 手把手教你封装 Vue 组件并使用 NPM 发布
Vue 开发插件 我们可以先查看Vue的插件的开发规范 我们开发的之后期望的结果是支持 import.require 或者直接使用 script 标签的形式引入,就像这样: ps: 这里注意一下包的名 ...
- Android开发之漫漫长途 Ⅶ——Android消息机制(Looper Handler MessageQueue Message)
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
- Spring mvc 4系列教程(一)
一.Spring框架概览 Spring框架是一种轻量级.一站式解决企业级应用的解决方案.不仅如此,Spring的模块化的特点,可以使你只引用所需要的部分,而无需引用全部.你可以使用控制反转容器(IoC ...