使用Java的访问控制符

来自CloudWiki
跳转至: 导航搜索

使用访问控制符

在定义类中成员变量和成员方法时,都会使用一些修饰符来做出某些限制。修饰符分为访问控制修饰符和非访问控制修饰符。访问控制修饰符是来限定类、属性或方法在程序其他地方访问和调用权限的,包括public、private、protected等。Java的非访问控制修饰符包括:static、final、abstract、native、volatile、synchronized等。

public修饰符

public修饰符表示公有,可以修饰类、属性和方法。如果使用了public访问控制符,则它可以被包内其他类、对象以及包外的类和对象方法使用。

【经验】

每个 Java 程序的主类都必须是public 类。若在一个Java源文件中定义了多个类,只能有一个类是公有类。一般的构造方法都会使用public来修饰。

private 修饰符

private修饰符只能修饰成员变量和成员方法。若使用private声明的变量和方法则只能由它所在类本身使用,其他的类和对象无权使用该变量和方法。封装中就是利用了这一点特性让属性私有化。如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。

protected修饰符

protected修饰符表示受保护,只能用来修饰成员变量和成员方法,不能修饰类。受保护的变量和方法的访问权限被限制在类本身、包内的所有类和定义它的类派生出的子类(可以在同一个包中,也可以在不同包)范围内。(子类在后面任务中详细介绍)。

默认(friendly)修饰符

如果一个类、方法或变量名前没有使用任何访问控制符,就称这个成员所拥有的是默认的访问控制符。默认的访问控制成员可以被这个包中的其它类访问,及称之为包访问特性。friendly并不是Java的关键字,只是对默认修饰符的一种字符形式上的定义,一般不会出现在程序中。

  • 头脑风暴:什么修饰符修饰的变量只能被该类本身访问?
  • 头脑风暴:什么修饰符修饰的变量能被同一个包内的其他类所访问?

各访问修饰符的作用效果如表3-1所示(包在下面说明)

  • Java3-3.png

【实例3-6】Book类有如下4种方法,思考:它们都分别能被哪些类所访问?。

  • Java3-14.png
package entity;
public class Book {
	private void priMethod(){//私有方法,只能本类使用
             System.out.println("only myclass can visit me !");
	}
	protected void proMethod(){//受保护方法,能被类本身、包内的所有类和子类所访问
	     System.out.println("类本身、包内的所有类和子类 can visit me !");
        }
	public void pubMethod(){//公有方法,可以被包内其他类、对象以及包外的类和对象方法使用。
             System.out.println("Everyone can visit me !");
	}
	void friMethod(){//默认(友好)方法,可以被这个包中的其它类访问
             System.out.println("包中的其它类 can visit me !");
	}
}

注解:

  1. private void priMethod(),访问权限为私有权限,只能在VisitP中使用;
  2. protected void proMethod(),访问权限为受保护,能被类本身和定义它的类的子类访问;
  3. public void pubMethod(),访问权限为公有,可以被任何类使用;
  4. void friMethod(),访问权限为默认(友好),可以被与定义它的类在同一包中的所有类使用。