Java访问修饰符
1 什么是Java的访问修饰符
Java中有两种类型的修饰符:访问修饰符和非访问修饰符。
Java中的访问修饰符指定字段,方法,构造方法或类的可访问性或范围。我们可以添加访问修饰符来更改字段,构造方法,方法和类的访问级别。
Java访问修饰符有四种类型:
- private:私有修饰符的访问级别仅在该类之内。不能从当前类的外部访问它。
- default:默认修饰符的访问级别仅在包中。不能从当前包的外部访问它。如果你未指定任何访问级别,则默认值就是default。
- protected:受保护的修饰符的访问级别是当前类的子类(子类可以放在当前包下或当前包外部)。如果不创建子类,则无法从包外部对其进行访问。
- public:公共修饰符的访问级别是“无处不在”。可以从类内部,类外部,包内部和包外部访问它。
有许多非访问修饰符,例如static, abstract, synchronized, native, volatile, transient等。本章节仅仅学习访问修饰符。
2 Java访问修饰符的作用范围
访问修饰符 | 当前类 | 当前包 | 子类(外部包) | 外部包 |
---|---|---|---|---|
private | Y | N | N | N |
default | Y | Y | N | N |
protected | Y | Y | Y | N |
public | Y | Y | Y | Y |
3 private
private访问修饰符仅可在当前类中访问。
3.1 private修饰符的示例
在本示例中,我们创建了两个类A和Simple。一个类包含私有字段和私有方法。我们从类外部访问这些私有成员,会发生编译时错误。
/**
* 一点教程网:http://www.yiidian.com
*/
class A{
private int data=40;
private void msg(){System.out.println("Hello java");}
}
public class Simple{
public static void main(String args[]){
A obj=new A();
System.out.println(obj.data);//编译错误
obj.msg();//编译错误
}
}
3.2 私有构造方法的作用
如果将任何类构造方法设置为私有,则不能从类外部创建该类的实例。例如:
/**
* 一点教程网:http://www.yiidian.com
*/
class A{
private A(){}//私有构造方法
void msg(){System.out.println("Hello java");}
}
public class Simple{
public static void main(String args[]){
A obj=new A();//编译错误
}
}
4 default
如果你不使用任何修饰符,则默认情况下会将其视为默认(default)修饰符。default修饰符只能在当前包中访问。不能从当前包的外部访问它。它提供了比private更多的可访问性。但是,它比protected的和public更有限制性。
4.1 default修饰符的示例
在本示例中,我们创建了两个包pack和mypack。由于A类的修饰符为default,所以B类无法从包外部访问A类。
/**
* 一点教程网:http://www.yiidian.com
*/
//A.java
package pack;
class A{
void msg(){System.out.println("你好");}
}
//save by A.java
package pack;
public class A{
protected void msg(){System.out.println("你好");}
}
在上面的示例中,类A的范围及其方法msg() 是default,因此无法从程序包外部对其进行访问。
5 protected
protected访问修饰符的范围是包内包外,但必须通过继承才能访问。
可以将protected访问修饰符应用于字段,方法和构造方法。它不能应用于类。
它提供了比default修饰符更多的可访问性。
5.1 proctected修饰符的示例
/**
* 一点教程网:http://www.yiidian.com
*/
//A.java
package pack;
public class A{
protected void msg(){
System.out.println("你好");
}
}
/**
* 一点教程网:http://www.yiidian.com
*/
//B.java
package mypack;
import pack.*;
class B extends A{
public static void main(String args[]){
B obj = new B();
obj.msg();
}
}
输出结果为:
你好
6 public
public访问修饰符是所有地方。在所有其他修饰符中,它的作用范围最广。
6.1 public修饰符的示例
/**
* 一点教程网:http://www.yiidian.com
*/
//A.java
package pack;
public class A{
public void msg(){
System.out.println("你好");
}
}
/**
* 一点教程网:http://www.yiidian.com
*/
//.java
package mypack;
import pack.*;
class B{
public static void main(String args[]){
A obj = new A();
obj.msg();
}
}
输出结果为:
你好
热门文章
优秀文章