关于java中的protected一点理解

来源:互联网 发布:投资数据库终端 编辑:程序博客网 时间:2024/06/17 10:21

先来张结构图,看清楚包和类的分布



下面是代码

package com.lwy.protect.one;public class Father {protected int i = 0;protected void print(){System.out.println(i);}}

package com.lwy.protect.one;public class SonA extends Father{@Overrideprotected void print() {i = 1;System.out.println(i);}}

package com.lwy.protect.one;import com.lwy.protect.two.SonC;public class SonB extends Father{@Overrideprotected void print() {i = 2;System.out.println(i);}public static void main(String[] args) {SonA a = new SonA();System.out.println(a.i); //同一个包下,可以访问受保护的变量a.print(); //同一个包下,可以访问受保护的方法System.out.println("============");SonC c = new SonC();System.out.println(c.i);//这里会报错,说明当此类与父类在同一个包下时,若被访问的子类与父类不在同一包下,则只可以访问其受保护的变量,不能访问其受保护的方法//c.print();  }}

package com.lwy.protect.two;import com.lwy.protect.one.Father;import com.lwy.protect.one.SonA;public class SonC extends Father{@Overrideprotected void print() {i = 3;System.out.println(i);}public static void main(String[] args) {SonA a = new SonA();//报错,说明当被访问的子类与父类在同一个包下时,由于此类与父类不在同一包下,所以无法访问受保护的变量//System.out.println(a.i);  //报错,说明当被访问的子类与父类在同一个包下时,由于此类与父类不在同一包下,所以无法访问受保护的方法//a.print();}}


得出结论:

如果用protected来修饰变量与方法: 若子类a,b与父类f在同一个包,则b可以访问a的变量与方法,a也可以访问b的变量和方法。如果有一个子类c在另一个包,也c无法访问与父类在同一个包的子类a,b的变量与方法,但是与父类在一个包的子类a,b可以访问c的变量,但不能访问方法。

如有错误,欢迎批评指出。

0 0
原创粉丝点击