不同包中继承关系访问protected内部类问题
有两个包pack1和pack2,pack1中是父类,pack2中子类继承自pack1中的父类。这里主要探索一下子类访问父类中protected内部类的问题:
第一个类:
package pack1;
public class BaseClass {
protected class InnerProt {}
public class InnerPub{}
}
第二个类:
package pack2
import pack1.*;
public class Mytest extends BaseClass { //继承自第一个包中的类BaseClass
InnerPub pub ; //【1】ok!
InnerProt prot ; //【2】ok!
public void innertest(){
pub = new InnerPub(); //【3】
//【4】error! can't new InnerProt();
//prot = new InnerProt(); }
}
我们分析一下:
1、包pack2中的Mytest继承包pack1中的BaseClass,所以Mytest类对BaseClass的public、protected成员具有访问权限,即【1】和【2】都是ok
2、在使用"new classname"创建一个对象的时候会调用构造函数,而这里是调用的默认构造函数;
默认构造函数的访问权限与其所属的类一致,所以InnerPub和InnerProt的默认构造函数的权限分别是public和protected;
"pub = new InnerPub()"构造pub对象时,默认构造函数的调用为:包pack2中的类Mytest访问另一个包pack1中InnerPub类的“public”属性的默认构造函数,所以ok。
而"prot = new InnerProt()"构造pub对象时,包pack2中的类Mytest访问的则是另一个包pack1中类InnerProt的"protected"属性的默认构造函数,Mytest与InnerProt并没有继承关系,也不是同一个包,所以这次访问是拒绝的!
不同包中继承关系访问protected内部类问题的更多相关文章
- java:包、继承,访问修饰符
包 包(package) 用于管理程序中的类,主要用于解决类的同名问题.包可以看出目录. 包的作用 [1] 防止命名冲突. [2] 允许类组成一个单元(模块),便于管理和维护 [3] 更好的保护类.属 ...
- java中继承关系学习小结
继承:把多个类中同样的内容提取出来.定义到一个类中,其它类仅仅须要继承该类.就能够使用该类公开的属性和公开的方法. 继承的优点:提高代码的复用性.提高代码的可维护性.让类与类之间产生关系,是多态存 ...
- C++/Java中继承关系引发的调用关系详解
C++: 这里引用到了 http://blog.csdn.net/haoel/article/details/1948051/ 中的内容,还请提前阅读陈大神的这篇博客后在阅读本篇. 覆盖,实现多态的基 ...
- C++中继承关系中的同名隐藏和对策
在C++及其面向对象的理论中,有这样的场景:一个类继承自另外一个类,如果这两个类都有一个函数名和参数及其返回值一样的成员函数,那么子类的函数会自动将父类对应的函数隐藏.即同名隐藏.在有时的开发过程中, ...
- Java 访问限制符 在同一包中或在不同包中:使用类创建对象的权限 & 对象访问成员变量与方法的权限 & 继承的权限 & 深入理解protected权限
一.实例成员与类成员 1. 当类的字节码被加载到内存, 类中类变量.类方法即被分配了相应内存空间.入口地址(所有对象共享). 2. 当该类创建对象后,类中实例变量被分配内存(不同对象的实例变量互不相同 ...
- Java继承关系的父子类中相同的成员变量
最近又重温了一遍<java编程思想>,在看的过程中产生一个想法,java中继承关系的父子类,相同的方法会被重写,那相同的变量会怎样呢? 答案是变量没有重写之说,如果子类声明了跟父类一样的变 ...
- Java中四种访问权限总结
一.Java中有四种访问权限, 其中三种有访问权限修饰符,分别为private.public.protected,还有一种不带任何修饰符(default). 1. private: Java语言中对访 ...
- Java 中关于default 访问权限的讨论
Java中关于成员变量访问权限问题一般书中会给出如下表格: 简单地描述一下表中的内容:用private 修饰的成员变量只能在类内部访问:用default修饰的成员变量可以再内部访问,也可以被同个包(同 ...
- C++类继承关系视图的自动生成
原创文章,转载请注明出处. 工欲善其事,必先利其器.阅读大型C++工程项目,如果有一些自动化的分析工具支持,学习的效率将大大提升.在前文中介绍了Source Insight在Linux下的安装方法,本 ...
随机推荐
- python反射原理
1.反射原理 通过字符串的形式导入模块: __import__(),可以以字符串的形式导入模块. 通过字符串的形式导入函数: 反射: 根据字符串去某个对象里面取东西,可以是字符串,函数,数字. 根据字 ...
- EditPlus远程编辑、语法高亮、编译运行源代码设置
最近写代码的过程中,除了写Java时用的Eclipse.在Linux下编辑的Vi之外,有时也会用EditPlus打开一些文件,如配置文件.日志文件.脚本等.个人觉得EditPlus在很多场景下比较好用 ...
- 构建Maven聚合工程
最近,准备构建一个Maven的项目,基于模块化的结构思想,决定使用Maven的聚合工程进行构建. 环境准备: (1)eclipse 这里推荐使用spring封装的eclipse(即STS) ,STS中 ...
- RabbitMQ on windows开启远程访问
我的RabbitMQ安装位置是:C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.5.6 为rabbitmq添加用户 C:\Progra ...
- VFP调用SOAPTOOLKIT 低级API
Connector=CREATEOBJECT("mssoap.HttpConnector")Connector.Property["EndPointURL"] ...
- 项目中可能用到的demo
1. 轮播图 https://github.com/codingZero/XRCarouselView 2. 图表 https://github.com/Zirkfied/ZFChart
- Python常用模块学习
1.模块介绍 2.time & datetime模块 3.random 4.os 5.sys 6.shutil 7.json&pickle 8.shelve 9.xml处理 10.ya ...
- Struts2------通配符
<struts> <package namespace="/" extends="struts-default" name="tes ...
- MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述
MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述: 1.MySQL有多种存储引擎: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(Berk ...
- js Function.call
提到上述的概念之前,首先想说说javascript中函数的隐含参数:arguments Arguments 该对象代表正在执行的函数和调用它的函数的参数. [function.]arguments ...