【基础】浅析protected权限

    xiaoxiao2021-11-29  26

    在实际开发中,一般对于类权限使用public,对于方法权限使用最多的是public,private,

    对于属性权限使用最多的是private,或者默认权限。使用以上权限,对于代码访问

    一般足够使用。很少使用protected权限

    (注意: 关于protected权限只能使用于方法或属性上,在类上是没有这个权限的,不能用于类上)

    有些特殊情况下我们需要使用protected,比如,父类提供了一个方法,不想让其他包中的

    对象访问,只想让自己所在包中的类访问,这个时候如果我们用public和private是满足不了

    这种需求的,这个时候protected权限就派上了用场。

    eg:

    在test包中有两个类,一个Parent,一个Children

    Parent:

     

    package com.lanhuigu.java.test; public class Parent { // protected在本包中可以访问,如果跨包就不能访问 protected String song() { return "唱歌"; } }

    Children:

     

     

    package com.lanhuigu.java.test; public class Children extends Parent{ // 子类重写父类的方法,扩大访问权限 public String song() { return "唱歌"; } public String code() { return "编码"; } }

    Test:

     

     

    package com.lanhuigu.java.util; import com.lanhuigu.java.test.Children; import com.lanhuigu.java.test.Parent; public class TestAccess { public static void main(String[] args) { Parent parent = new Parent(); /* * Parent中的song方法是protected权限,其他包中没有访问权限 */ //System.out.println(parent.song()); System.out.println("================="); Children children = new Children(); System.out.println(children.code()); /* * 子类通过重写父类的song方法,将父类的访问权限protected提升至public的高度, * 供其他包中的类调用,如果子类不重写父类的song方法,提高访问权限,其他包中的类通过 * 子类对象也是无法访问song方法的,因为没有提高访问权限之前song方法是protected权限的。 */ System.out.println(children.song()); } }

     

    程序分析:

    在test包中,Parent类song方法访问权限为protected权限,子类Children继承父类,

    重写父类Parent的song方法,将访问权限提高到public程度,在TestAccess中,

    通过父类对象Parent不能访问父类protected权限的song方法,因为TestAccess类在util包中,

    与Parent不在同一包中,所以不能访问;但是可以通过子类Children对象访问song方法,因为

    子类重写了父类的song方法,提升了访问权限。

     

    为什么protected权限叫做'友好'权限?

    就好比一个家族中某个人升官发财,有好处一般都是给这个家族中共享,

    一般不会把好处给了外人,但是世间还是有真情的,家族中某些人将这些好处从protected

    保护的状态提升到public公开的状态,这样其他家族都能共享了,这就是友好的含义。

     

    在java中,比如A包就一个家族,在A包中protected的东西大家都能用,

    但是对于另外一个包B就是外人,直接看不到A中的protected的东西。

    如果B包想用A包的protected东西,必然有A包中某个类将protected的东西

    提升到public的程度,B包才能使用。

     

    转载请注明原文地址: https://ju.6miu.com/read-678889.html

    最新回复(0)