欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java中的四种访问修饰符(附代码测试)

程序员文章站 2022-07-10 08:10:35
...

在写Java代码的时候,总会使用到访问修饰符,那么,四种访问修饰符之间有什么区别?又是什么时候去使用相对应的修饰符呢?今天就了解一下这四个修饰符的不同吧。
Java四个修饰符:public、protected、default、private。按照顺序,修饰符能作用的范围依次减小。用一个表格来表示就是:
Java中的四种访问修饰符(附代码测试) 为了验证表格的正确与否以及更好地理解,下面我们用代码来测试一下。
首先我们来验证四种修饰符能否都在同类中发生作用。

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

由此可见,四种修饰符是都可以在同类中发挥作用的。
同一个包中(子类与其他类):
子类:
Java中的四种访问修饰符(附代码测试)
我们可以看到,在子类中,并没有父类的test4()方法。因此,private是不能作用于子类的。如果我们设置一个s.test4(),会发生什么情况呢?

Java中的四种访问修饰符(附代码测试)
这样也证实了表格中给出的结论了,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

非子类:
Java中的四种访问修饰符(附代码测试)
我们可以看到,同一个包中,没有继承父类,即不是它的子类,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

不同一个包中(子类与其他类):
上面介绍了在同一个包中的情况,接下来,我们就来测试一下不同包中四种修饰符的作用结果吧。
首先是不同包中的子类:
Java中的四种访问修饰符(附代码测试)
我们可以看到,在不同包中,类的子类只有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

接下来则是其他包中非子类的情况是如何?
Java中的四种访问修饰符(附代码测试)
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、计算机网络或者是数据结构方面的知识。加个小尾巴,也算是督促自己的吧。
各位走过路过,觉得有用的话,不妨点个赞把 ,你看这个赞,它又长又宽~~~~~~