2023.07.26学习记录
大二学习过java,但对于许多漏洞并未学习了解到,简单记录,便于后期忘记之后回顾知识。
初步理解
关于protected与默认修饰的属性和方法的区别的理解
1、Protected:所有子类(尽管该子类不在同一个包中)和同一个包中的所有类可以访问。
2、默认:只有同一个包中的类可以访问。
知识漏洞补充
前面只是片面理解了可访问范围这个词,而没有深刻理解,严格遵循访问原则去学习。放了一个错误:误以为只要子类能够继承受protected修饰的属性和方法,无论在什么地方都能访问到该属性和方法了,觉得子类能够带着父类能够继承的所有属性勇闯天涯!!!但现实并非是如此。
事实揭露:
- 对于protected修饰的属性和方法,在范围外,尽管是通过范围内的子类对象,也不能够直接访问到。
- 但子类确确实实已经继承了该属性,却也只能在子类本类中访问
- …
具体案例说明
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
文章讨论了Java中protected和默认修饰符对属性和方法访问权限的影响。protected允许子类和同一包内的类访问,而默认只允许同一包内的访问。通过示例代码,作者指出即使子类继承了protected成员,在不同包中也不能直接访问,需通过子类的方法间接访问。

1122

被折叠的 条评论
为什么被折叠?



