java的类中,这3个关键词的用法有所区别,先看一个表格:
private
大多数成员变量都是修饰符为private的,它们不希望被其他任何外部的类访问。只能被类内部的成员函数访问。
default
它是针对本包访问而设计的,任何处于本包下的类、接口、异常等,都可以相互访问,即使是父类没有用protected修饰的成员也可以。
protected
主要的作用就是用来保护子类的。它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西
public
这个就不用说了,任何地方都可以访问
下面上代码说明。
src下面packageone文件夹,Alpha.java
package packageone;
public class Alpha {
public void test() //通过定义public成员函数来让实例访问不能直接对外
{
this.pub();
this.pro();
this.def();
this.pri();
}
public void pub() //定义public成员函数
{
System.out.println( "public");
}
protected void pro() //定义protected成员函数
{
System.out.println( "protected");
}
void def() //定义default成员函数
{
System.out.println( "default");
}
private void pri() //定义private成员函数
{
System.out.println( "private");
}
}
src下面packageone文件夹,Beta.java
package packageone;
public class Beta {
public void test()
{
Alpha alpha = new Alpha();
alpha.pub();
alpha.pro();
alpha.def();
// alpha.pri(); //错误,不能访问
}
}
src下面packagetwo文件夹,AlphaSub.java
package packagetwo;
import packageone.Alpha;
public class AlphaSub extends Alpha {
public void test()
{
super.pub();
super.pro();
// super.def(); //错误,不能范文
// super.pri(); //错误,不能范文
}
}
src下面packagetwo文件夹,Gamma.java
package packagetwo;
import packageone.Alpha;
public class Gamma {
public void test()
{
Alpha alpha = new Alpha();
alpha.pub();
// alpha.pro(); //错误,不能访问
// alpha.def(); //错误,不能访问
// alpha.pri(); //错误,不能访问
}
}
主函数Test.java
import packageone.Alpha;
public class Test {
public static void main(String[] args)
{
new Alpha().test();
}
}
对比总结:
- private只能在类部被访问;public全局可访问;
- protected和default的区别在于default只能在当前包内被访问;