前言:在java编程中变量和方法前我们通常要加修饰词来标识他的一个作用范围。常用的有四种,我们要灵活使用,这样才能设计出更健壮、易扩展的代码。
- public:
①具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。(我们可以通过get方法访问,也可以对象.属性名来访问) private:
①类的创建者和内部方法使用(注意只能是本类,不是本对象),内部类也无法使用protected:
①子类可以访问protected修饰的变量和方法。(只要是子类,即使不同包)。②同包中可以访问protected。- 不写:
①声明时没有加修饰符,认为是friendly修饰,包内部访问。
测试代码
/**
* 父类
*
* @author lijianbo
*
*/
public class Parent {
// 任何地方都可以访问
public String publicName;
// 只能类本身使用,对象都无法使用,内部类也无法使用
private String privateStr = "privateStr";
// 受保护的方法,只能在本类,同包,子类中访问
protected String protectedStr = "protectedStr";
// 不写修饰符,同包中访问
String noDeclarationStr = "没有修饰符修饰的Str";
public String getPublicName() {
return publicName + getPrivateStr();
}
public void setPublicName(String publicName) {
this.publicName = publicName;
}
private String getPrivateStr() {
return privateStr;
}
protected String getProtectedStr() {
return protectedStr;
}
}
// 内部类
class InnerClass {
public static void main(String[] args) {
// getPrivateStr(); error 内部类也无法访问私有的
}
}
/**
* 子类
*
* @author lijianbo
*
*/
public class Sun extends Parent {
// protected 修饰的可以使用
public String getName() {
return protectedStr;
}
public String getName2() {
return getProtectedStr();
}
}
/**
* 测试public、private、protected、不写修饰符
*
* @author lijianbo
*
*/
public class authorityTest {
public static void main(String[] args) {
/*
* public 修饰的项目中任何地方都可以访问
*/
Parent parent = new Parent();
parent.setPublicName("public名字");
String publicName = parent.getPublicName();
System.out.println(publicName);
// 对象.属性名
String publicName2 = parent.publicName;
System.err.println(publicName2);
/*
* protected 同包可以访问
*/
parent.getProtectedStr();
System.out.println("--------------------");
// 子类中可以获取父类的protect方法、属性(即时不同包可以访问)
Sun sun = new Sun();
String protectedStr1 = sun.protectedStr;
System.out.println(protectedStr1);
String protectedStr2 = sun.getProtectedStr();
System.out.println(protectedStr2);
/*
* 没有修饰符修饰,认为是friendly修饰,同包访问
*/
String noDeclarationStr = parent.noDeclarationStr;
System.err.println(noDeclarationStr);
}
}
打印结果为:
public名字privateStr
public名字
protectedStr
protectedStr
没有修饰符修饰的Str