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

  • 相关阅读:
    使用transfor让图片旋转
    block与inline,inline和inline-block,块级和行内元素,行内替换和行内非替换元素
    使用classList来实现两个按钮样式的切换
    关于css透明度的问题
    级动(两级联动)思路分享
    js图片预览(一张图片预览)
    js关于密码框强弱度的提示
    javascript对象与实例
    javascript 逻辑运算符
    Raphael画圆弧
  • 原文地址:https://www.cnblogs.com/liuhailong0112/p/5470107.html
Copyright © 2011-2022 走看看