从实例角度分析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 共有继承,当时也没想那么多,觉得共有继承多方便,多简单,反正没有太多的限制,不管是类的成员或者是基类的成员函数都可以访问.没有深究.其实这里面真是 ...
随机推荐
- 文本框仅可接收decimal
文本框html如下: <div><label class="label">价格:</label><input id="TextP ...
- Fiddler工具使用介绍三
我们知道Fiddler是位于客户端和服务器之间的代理,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点.调试web应用.修改请求的数据,甚至可以修改 ...
- TwoSum / Three Sum
Let's begin with a naive method. We first need to sort the array A[n]. And we want to solve the prob ...
- JAVA JDK的安装及初步试用
1.进入浏览器输入下图网址进入相关页面 2.网站主界面如图 3.单击箭头所指功能块 4.选择如下图的对应选项 5.进入如下页面后单击下图红色框 6.进入如下页面后单击如下红色框进行下载 7.下载好之 ...
- 一次Java解析数独的经历
1. 背景 中午下楼去吃饭,电梯里看到有人在玩数独,之前也玩过,不过没有用程序去解过,萌生了一个想法,这两天就一直想怎么用程序去解一个数独.要去解开一个数独,首先要先了解数独的游戏规则,这样才能找到对 ...
- 使用IST重新加入节点(5.7.20)
IST不是SST用于节点重新加入吗?我们有解决方案! 鉴于上述痛点,我们将介绍 gcache.freeze_purge_at_seqno Percona XtraDB Cluster 5.7.20.这 ...
- zookeeper+kafka集群的安装部署
准备工作 上传 zookeeper-3.4.6.tar.gz.scala-2.11.4.tgz.kafka_2.9.2-0.8.1.1.tgz.slf4j-1.7.6.zip 至/usr/local目 ...
- SQLServer——SQLServer链接外部数据源
学习链接:https://www.cnblogs.com/licin/p/6244169.html 一.新建ODBC数据源 1.打开控制面板→管理工具→ODBC数据源→系统DSN 2.添加新系统数据源 ...
- 用SpringSecurity从零搭建pc项目-01
注:之前写过一些列的SpringSecurity的文章,重新写一遍是为了把某些不必要的步骤省去,留下精简的,因为工作中有一些不需要. 在java的权限框架里,shiro和SpringSecurity是 ...
- Mac OS X 下搭建thrift环境
1.概述 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生产引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, ...