一、实例成员与类成员

1. 当类的字节码被加载到内存, 类中类变量、类方法即被分配了相应内存空间、入口地址(所有对象共享)。

2. 当该类创建对象后,类中实例变量被分配内存(不同对象的实例变量互不相同,即分配了不同的内存空间);

类中实例方法被分配入口地址(创建第一个对象时分配;方法的入口地址被所有的对象共享;所有对象都不存在时,方法的入口地址才被取消)。

3在同一类中,类中的实例方法总是可以操作该类中的实例变量和类变量;类方法总是可以操作该类中的类变量。(与访问限制符没有关系)    

二、使用类创建对象的权限 & 对象访问成员变量与方法的权限

1. 在同一包中:

可以在任何另外一个类中使用public类与友好类创建对象;

创建的对象能够通过“.”运算符操作自己类中不是private的成员变量与方法。

2. 不在同一包中:import语句

可以在任何另外一个类中使用public类创建对象;

创建的对象能够通过“.”运算符操作自己类中public的成员变量与方法。

三、继承的权限

1. 子类与父类在同一包中,子类继承父类中不是private的成员变量与方法。

2. 子类与父类不在同一包中时,子类只继承父类中的protected和public访问权限的成员变量与方法。

四、深入理解protected权限

*注意!!!

对于protected的成员变量与方法,

可以被同一包中的其它类(包括子类)访问,同时也能被不同包中的子类访问;

当不在同一个包,不存在继承时,对于其他包中的类而言是不能访问的。

* 总结:

1. 子类可以通过继承获得不同包父类的protected权限成员变量和成员方法,在子类中可以直接访问

2. 在子类中可以通过子类的对象访问父类的protected成员变量和方法

3. 在子类中反而不能通过父类的对象访问父类的protected成员变量和方法

4.在子类中不能通过其他子类的对象访问父类的protected成员变量和方法

5.在与子类同包的其他类中不能通过子类的对象访问父类的protected成员变量和方法

关于protected权限的子类访问方式

https://blog.csdn.net/blacktal/article/details/81198579

 package lab5_2_a;

 public class Parent {
private int f1 = 11;
int f2 = 12;
protected int f3 = 13;
public int f4 = 14;
private void fm1() {
System.out.println("in fm1()");
}
void fm2() {
System.out.println("in fm2()");
}
protected void fm3() {
System.out.println("in fm3()");
}
public void fm4() {
System.out.println("in fm4()");
} public static void main(String[] args){
/*当类的字节码被加载到内存,
* 类中类变量、类方法即被分配了相应内存空间、入口地址(所有对象共享)。
*/
//在同一类中,类中的实例方法总是可以操作该类中的实例变量和类变量;类方法总是可以操作该类中的类变量。
Parent p = new Parent();
/*Parent类创建对象,类中实例变量被分配内存(不同对象的实例变量互不相同,即分配了不同的内存空间);
* 类中实例方法被分配入口地址
* (创建第一个对象时分配;方法的入口地址被所有的对象共享;所有对象都不存在时,方法的入口地址才被取消)。
*/ p.fm1();
p.fm2();
p.fm3();
p.fm4();
}
}
 package lab5_2_a;

 public class Child extends Parent {
private void cm1() {
System.out.println("in cm1()");
}
void cm2() {
System.out.println("in cm2()");
}
protected void cm3() {
System.out.println("in cm3()");
}
public void cm4() {
System.out.println("in cm4()");
} public static void main(String[] args){
Child c = new Child();
c.cm1();
c.cm2();
c.cm3();
c.cm4();
//继承:子类与父类在同一包中,子类继承父类中不是private的成员变量与方法
//c.fm1();
c.fm2();
c.fm3();
c.fm4();
}
}
package lab5_2_a;

public class Inherit {
public static void main(String[] args){
Parent p = new Parent();
/* 访问权限(在同一包中):
* 可以在任何另外一个类中使用public类与友好类创建对象;
* 创建的对象能够通过“.”运算符操作自己类中不是private的成员变量与方法。
*/
//p.fm1();
p.fm2();
p.fm3();
p.fm4(); Child c = new Child();
/* 访问权限(在同一包中):
* 可以在任何另外一个类中使用public类与友好类创建对象;
* 创建的对象能够通过“.”运算符操作自己类中不是private的成员变量与方法。
*/
//c.cm1();
c.cm2();
c.cm3();
c.cm4();
//c.fm1();
c.fm2();
c.fm3();
c.fm4();
}
}
 package lab5_2_b;

 import lab5_2_a.Child;

 public class GrandChild extends Child {
public static void main(String[] args){
GrandChild g = new GrandChild();
//继承:子类与父类不在同一包中时,子类只继承父类中的protected和public访问权限的成员变量与方法
//g.cm1();
//g.cm2();
g.cm3();
g.cm4();
//继承:子类与父类不在同一包中时,子类只继承父类中的protected和public访问权限的成员变量与方法
//g.fm1();
//g.fm2();
g.fm3();
g.fm4();
}
}
 package lab5_2_b;

 public class GreatGrandChild extends GrandChild {
public static void main(String[] args){
GreatGrandChild g = new GreatGrandChild();
//继承:子类与父类在同一包中,子类继承父类中不是private的成员变量与方法
//g.cm1();
//g.cm2();
g.cm3();
g.cm4();
//继承:子类与父类在同一包中,子类继承父类中不是private的成员变量与方法
//g.fm1();
//g.fm2();
g.fm3();
g.fm4();
}
}
 package lab5_2_b;

 import lab5_2_a.*;

 public class Inherit {
public static void main(String[] args){
Parent p = new Parent();
/* 访问权限(不在同一包中):import语句
* 可以在任何另外一个类中使用public类创建对象;
* 创建的对象能够通过“.”运算符操作自己类中public的成员变量与方法。
*/
//p.fm1();
//p.fm2();
//p.fm3();
p.fm4(); Child c = new Child();
/* 访问权限(不在同一包中):import语句
* 可以在任何另外一个类中使用public类创建对象;
* 创建的对象能够通过“.”运算符操作自己类中public的成员变量与方法。
*/
//c.cm1();
//c.cm2();
//c.cm3();
c.cm4();
//c.fm1();
//c.fm2();
//c.fm3();
c.fm4(); GrandChild g = new GrandChild();
/* 访问权限(在同一包中):
* 可以在任何另外一个类中使用public类与友好类创建对象;
* 创建的对象能够通过“.”运算符操作自己类中不是private的成员变量与方法。
*/
//g.cm1();
//g.cm2(); //g.cm3();
/* 注意!!!
* 对于protected的成员变量与方法,
可以被同一包中的其它类(包括子类)访问,同时也能被不同包中的子类访问;
当不在同一个包,不存在继承时,对于其他包中的类而言是private(不能访问的)。
* 总结:
1. 子类可以通过继承获得不同包父类的protected权限成员变量和成员方法,在子类中可以直接访问
2. 在子类中可以通过子类的对象访问父类的protected成员变量和方法 3. 在子类中反而不能通过父类的对象访问父类的protected成员变量和方法
4.在子类中不能通过其他子类的对象访问父类的protected成员变量和方法
5.在与子类同包的其他类中不能通过子类的对象访问父类的protected成员变量和方法
*/ g.cm4();
//g.fm1();
//g.fm2(); //g.fm3();
/* 注意!!!对于protected的成员变量与方法,
* 可以被同一包中的其它类(包括子类)访问,同时也能被不同包中的子类访问;
* 当不在同一个包,不存在继承时,对于其他包中的类而言是private(不能访问的)
* 总结:
1. 子类可以通过继承获得不同包父类的protected权限成员变量和成员方法,在子类中可以直接访问
2. 在子类中可以通过子类的对象访问父类的protected成员变量和方法 3. 在子类中反而不能通过父类的对象访问父类的protected成员变量和方法
4.在子类中不能通过其他子类的对象访问父类的protected成员变量和方法
5.在与子类同包的其他类中不能通过子类的对象访问父类的protected成员变量和方法
*/ g.fm4();
}
}

Java 访问限制符 在同一包中或在不同包中:使用类创建对象的权限 & 对象访问成员变量与方法的权限 & 继承的权限 & 深入理解protected权限的更多相关文章

  1. java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。

    首先先说一下类的加载,流程.只有明确了类这个对象的存在才可以更好的理解反射的原因,以及反射的机制. 一.  类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三 ...

  2. java利用反射绕过私有检查机制实行对private、protected成员变量或方法的访问

    在java中,如果类里面的变量是声明了private的,那么只能在被类中访问,外界不能调用,如果是protected类型的,只能在子类或本包中调用,俗话说没有不透风的墙.但是可以利用java中的反射从 ...

  3. java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。

    //------------------------------------------------我是代码的分割线 // 首选是一个工具类,在该工具类里面,定义了一个方法,public void s ...

  4. 继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类。 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。 (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。 (4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。 分析以上程

    继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法.(3)子类中定义的成员变量和父类中定义的 ...

  5. 测试 Java 类的非公有成员变量和方法

    引言 对于软件开发人员来说,单元测试是一项必不可少的工作.它既可以验证程序的有效性,又可以在程序出现 BUG 的时候,帮助开发人员快速的定位问题所在.但是,在写单元测试的过程中,开发人员经常要访问类的 ...

  6. Java学习日记基础篇(四)——类,对象之成员变量,成员方法,构造方法

    面向对象(Object Oriented) 一.面向对象杂谈 面向对象(Object Oriented),我的翻译是以物体为目标的,就是说编程的时候是建立一个物体,然后对这个物体进行操作. Java语 ...

  7. [Java] 继承中,父类被覆盖的成员变量、方法的可访问性

    在 Java 的继承机制里,在子类内部,可以访问父类被覆盖的变量和方法:在子类外部,可以访问父类的被覆盖变量,但是不能访问父类的被覆盖方法. 父类中被覆盖的方法不能在外部被方法,这是出于封装的考虑. ...

  8. PHP面向对象(OOP)----访问限制符

    访问控制修饰符指public.protected.private三个关键词来修饰类的成员属性和成员方法,可以有不同的权限 public:[共有的]类里面调用和类外面调用都是可以的 protected: ...

  9. java接口中成员变量和方法的默认修饰符(转)

    Java的interface中,成员变量的默认修饰符为:public static final 所以我们在interface中定义成员变量的时候,可以 1:public static final St ...

随机推荐

  1. 自动化工具-ansible服务部署与使用

    1.前言 1.1ansible软件介绍 python 语言是运维人员必须会的语言 ansible 是一个基于python 开发的自动化运维工具 其功能实现基于ssh远程连接服务 ansible 可以实 ...

  2. javascript自定义一个全类型读取的函数

    我爱撸码,撸码使我感到快乐!大家好,我是Counter.因为我们知道,在JavaScript中有自带的方法可以读取类型,但是不很全面,今天来分享下如何自己定义一个函数,将所有传入参数的类型给打印出来, ...

  3. Bootstrap如何实现导航条?导航条实例详解

    本文主要和大家分享Bootstrap实现导航实例详解,在建设一个网站的时候,不同的页面有很多元素是一样的,比如导航条.侧边栏等,我们可以使用模板的继承,避免重复编写html代码.现在我们打算实现一个在 ...

  4. 树形插件zTree与组织插件jOrgChart交互

    <html> <head> <title>组织架构</title> <meta http-equiv="content-type&quo ...

  5. Arthas:线上问题排查工具

    安装 下载 java -jar arthas-boot.jar 查看版本: D:\Program Files\arthas $ java -jar arthas-boot.jar -version [ ...

  6. KAFKA跨主机部署网络不通解决思路

    Kafka的部署不仅需要集群可用,同时需要对orderer节点可连,这就是为什么有的时候,kafka集群本身没问题,但是orderer却总是报错. 为了试验kafka剥离方案的可行性,跨阿里云网络和内 ...

  7. docker笔记(3) ------Django项目的docker部署

    2019-01-12   14:23:18 django容器连接到mysql_server容器分析:原myblog项目使用sqlit3数据库,使用mysql容器前需要在django中加入pymysql ...

  8. 20175317 MyCP(课下作业,必做)

    一.题目要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内 ...

  9. Batchnorm

    Internal Covariate Shift:每一次参数迭代更新后,上一层网络的输出数据经过这一层网络计算后,数据的分布会发生变化,为下一层网络的学习带来困难(神经网络本来就是要学习数据的分布,要 ...

  10. android------个人项目(歆语气象通新版)

    歆语气象通: 歆语气象伴随你的身边,便捷生活. 包含了以下功能: 1. 天气预报数据覆盖中国城市和地区:2. 提供一周天气预报及最低最高温度,时刻关注天气,轻松计划出行:3. 各种指数详细信息,如太阳 ...