ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

权限修饰符

2021-12-23 23:35:42  阅读:130  来源: 互联网

标签:修饰符 子类 clone Object 权限 方法 类中


关于Java权限修饰符的理解:             Java权限修饰符分为:private、(缺省)、protected、public。             对于Java权限修饰符的理解:权限修饰符用来限定所修饰的类的成员在不同类中的可见性,注意这里只提到了类这个字,没有涉及到对象,对象只是我们去访问属性或者调用方法时的一个指针,我们通过这个指针来访问属性或者调用方法,但是属性和方法到底能不能被成功访问和调用,关键看当前你在哪个类中进行该访问或者调用操作。例如,         如果属性或方法是private的,那么并非任何时候用对象调用的时候,通过对象.xx的形式都点不出来,只要在声明该属性或方法的类中,就可以直接通过对象.xx的形式访问此被private修饰的属性或方法。在String类的源码中,重写equals()方法时,就是这样用的(注意被private修饰的coder,和return后面的this.coder == aString.coder)。
    private final byte coder;    

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        return (anObject instanceof String aString)
                && (!COMPACT_STRINGS || this.coder == aString.coder)
                && StringLatin1.equals(value, aString.value);
    }
        再如,Object中用protected修饰的clone()方法。用protected修饰的方法似乎可以被子类对象所访问,当你这样思考时,你就又忘记了前面说的,对于权限修饰符的可见性,只是对类而言,与对象毫无关系。永远遵循权限修饰符用来限定所修饰的类的成员在不同类中的可见性。         protected表示该方法的可见性为:Object类内部、与Object类同包的所有类、以及继承Object类的那个子类。即使到了这一步,你可能仍然会不解,为什么我的IED仍然报错说该方法不可见。其实这里你应该可以联想到,当你试图在另一个类中通过对象.xx的形式调用一个私有方法或属性时,报的也是这个错误。很显然这是由于可见性导致的。           你可以这样理解:每一个不与Object类在同一个包中的继承Object类的子类,都被Object类告知,你继承的clone()方法只对你这个子类可见。因此,我们无法在别的类中调用这个继承了Object类的子类继承的clone()方法,只能在这个子类内部调用自己继承的clone()方法。即使Object类是每个类的父类,但是所有不与Object类在同一个包中的继承Object类的子类都一样,都被Object类告知了上面这句话。其效果大致是这样的:只要和Object类不再同一个包中的其他类,相当于都有一份属于自己的私有的clone()方法。         当然如果重写了clone()方法,效果就会有所不同,这意味着你不再是去拿Object类中的clone()方法了,你有了一份自己的clone()方法,那么根据你重写该方法时使用的权限修饰符,重写的这个方法会有自己的可见性范围。

标签:修饰符,子类,clone,Object,权限,方法,类中
来源: https://www.cnblogs.com/mryx/p/15725659.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有