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

  • 相关阅读:
    倍数求和
    最大(小)值
    数组扁平化:(多维数组 -> 一维数组)
    任意数求和
    找到重复最多项
    Linux 标准 I/O 库
    Linux文件操作函数
    Linux文件的IO操作 一
    Linux文件系统概述二
    Linux文件系统概述
  • 原文地址:https://www.cnblogs.com/liuhailong0112/p/5470107.html
Copyright © 2011-2022 走看看