• 不同包中继承关系访问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并没有继承关系,也不是同一个包,所以这次访问是拒绝的!

  • 相关阅读:
    LNMP一键安装
    IIS出现问题报CS0016
    如何在windows live Write中添加插件
    合同管理系统 功能一览表
    房地产合同档案分类及编号规则
    属性ErrorLogFile不可用于JobServer的解决方案
    Wps定义选中区域的名称
    常用的SQL语句
    xp sp3 访问IIS元数据库失败解决办法
    完全卸载oracle11g步骤
  • 原文地址:https://www.cnblogs.com/liuhailong0112/p/5470107.html
Copyright © 2020-2023  润新知