Java中的四种访问修饰符(附代码测试)
程序员文章站
2022-07-10 08:10:35
...
在写Java代码的时候,总会使用到访问修饰符,那么,四种访问修饰符之间有什么区别?又是什么时候去使用相对应的修饰符呢?今天就了解一下这四个修饰符的不同吧。
Java四个修饰符:public、protected、default、private。按照顺序,修饰符能作用的范围依次减小。用一个表格来表示就是:
为了验证表格的正确与否以及更好地理解,下面我们用代码来测试一下。
首先我们来验证四种修饰符能否都在同类中发生作用。
package com.hpu.edu.dong;
public class Test {
public void test1(){
System.out.println("我是public");
}
protected void test2(){
System.out.println("我是protected");
}
void test3(){
System.out.println("我是default");
}
private void test4(){
System.out.println("我是private");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test t=new Test();
t.test1();
t.test2();
t.test3();
t.test4();
}
}
我是public
我是protected
我是default
我是private
由此可见,四种修饰符是都可以在同类中发挥作用的。
同一个包中(子类与其他类):
子类:
我们可以看到,在子类中,并没有父类的test4()方法。因此,private是不能作用于子类的。如果我们设置一个s.test4(),会发生什么情况呢?
这样也证实了表格中给出的结论了,private是不能在同包的子类中起作用的。
代码测试:
package com.hpu.edu.dong;
public class TestSon extends Test{
public static void main(String args[]){
TestSon s=new TestSon();
s.test1();
s.test2();
s.test3();
//s.test4();
}
}
我是public
我是protected
我是default
非子类:
我们可以看到,同一个包中,没有继承父类,即不是它的子类,private同样不能发挥作用。
代码测试:
package com.hpu.edu.dong;
public class TestNotSon {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test t=new Test();
t.test1();
t.test2();
t.test3();
}
}
我是public
我是protected
我是default
不同一个包中(子类与其他类):
上面介绍了在同一个包中的情况,接下来,我们就来测试一下不同包中四种修饰符的作用结果吧。
首先是不同包中的子类:
我们可以看到,在不同包中,类的子类只有public、protected这两个可以产生效果。
package com.hpu.edu.test;
import com.hpu.edu.dong.Test;
public class TestOtherSon extends Test{
public static void main(String[] args) {
// TODO Auto-generated method stub
TestOtherSon th=new TestOtherSon();
th.test1();
th.test2();
}
}
我是public
我是protected
接下来则是其他包中非子类的情况是如何?
OK,结果已经显而易见了。
代码测试:
package com.hpu.edu.test;
import com.hpu.edu.dong.Test;
public class TestOtherNotSon {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test t=new Test();
t.test1();
}
}
我是public
OK,除了public ,其余三位全部GG。
通过代码的演示,已经展示出了四种访问修饰符的不同作用范围,相信对理解这四种修饰符会有更好的帮助。
到今年春节为止,坚持每周起码写三篇博客,JavaSE、JavaEE、计算机网络或者是数据结构方面的知识。加个小尾巴,也算是督促自己的吧。
各位走过路过,觉得有用的话,不妨点个赞把 ,你看这个赞,它又长又宽~~~~~~