访问控制修饰符——protected和默认

文章讨论了Java中protected和默认修饰符对属性和方法访问权限的影响。protected允许子类和同一包内的类访问,而默认只允许同一包内的访问。通过示例代码,作者指出即使子类继承了protected成员,在不同包中也不能直接访问,需通过子类的方法间接访问。

2023.07.26学习记录

大二学习过java,但对于许多漏洞并未学习了解到,简单记录,便于后期忘记之后回顾知识。


初步理解

关于protected与默认修饰的属性和方法的区别的理解

1、Protected:所有子类(尽管该子类不在同一个包中)和同一个包中的所有类可以访问。
2、默认:只有同一个包中的类可以访问。

知识漏洞补充

前面只是片面理解了可访问范围这个词,而没有深刻理解,严格遵循访问原则去学习。放了一个错误:误以为只要子类能够继承受protected修饰的属性和方法,无论在什么地方都能访问到该属性和方法了,觉得子类能够带着父类能够继承的所有属性勇闯天涯!!!但现实并非是如此。
事实揭露:

  1. 对于protected修饰的属性和方法,在范围外,尽管是通过范围内的子类对象,也不能够直接访问到。
  2. 但子类确确实实已经继承了该属性,却也只能在子类本类中访问

具体案例说明

1、背景:在Demo04包中有一个类Goo,其中有属性c(protected修饰),在Demo05包中创建一个Goo的子类Gooson。
2、在子类本类中访问属性c——能够正常访问

//创建一个类继承Demo04下的Goo
class Gooson extends Goo {
    int  getC(){
        Gooson gooson=new Gooson();
        int c1=gooson.c;//在子类中能访问
        return c1;
    }

}

2、在Demo05包中的Demo类中访问——尽管通过创建子类Gooson的对象,也不能访问到。

public class Demo {
    public static void main(String[] args) {
        //创建Goo对象
        Goo goo = new Goo();
        //访问goo属性,只能访问到goo.b
        System.out.println(goo.b);

        //创建Gooson对象,访问Goo的受保护属性c
        Gooson gooson =new Gooson();
        //gooson.c;在外包中的类(非子类)尽管是通过子类对象,也不能访问
        int c = gooson.getC();//需要访问,只能通过调用子类中的相应方法

    }
}

3、父类Goo

package Demo04;

public class Goo {
    private int a=5;
    public int b=6;
    protected  int c=9;//受保护的属性,不同包下的子类可以访问
    int add(){
        //私有的 在类的内部可以访问
        return a+b;
    }

    public static void main(String[] args) {
        Koo koo=new Koo();
        System.out.println(koo.c);
    }
}
class Koo extends Goo{

}


Tips

  1. 您发布的文章将会展示至 里程碑专区 ,您也可以在 专区 内查看其他创作者的纪念日文章
  2. 优质的纪念文章将会获得神秘打赏哦
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值