在练习java程序时,你必须看过public、private、protected关键字,这些被称为访问修饰符。
访问修饰符是对另一个类中的类,构造函数,数据成员和方法的访问进行一定的限制。
在java中我们有四个访问修饰符:
- default
- private
- protected
- public
1.default访问修饰符
当我们没有提到任何访问修饰符时,它被称为default访问修饰符。
此修饰符的范围仅限于包。
这意味着如果我们在包中有一个具有default访问修饰符的类,则只有此包中的那些类才能访问此类。
此程序包外没有其他类可以访问此类。
类似地,如果我们在类中有一个默认方法或数据成员,它将在另一个包的类中不可见。
让我们看一个例子来理解这个:
在这个例子中我们有两个类,Test类试图访问Addition类的默认方法,因为类Test属于不同的包。
这个程序会抛出编译错误,因为默认修饰符的范围仅限于同一个包中宣布它。
Addition.java
package abcpackage;
public class Addition {
/* 因为未加限定符
* 被认为是default.
*/
int addTwoNumbers(int a, int b){
return a+b;
}
}
Test.java
package xyzpackage;
/* 导入了包但是仍报错
* 因为尝试使用default限定的成员
*/
import abcpackage.*;
public class Test {
public static void main(String args[]){
Addition obj = new Addition();
/* 将会抛出异常,因为尝试使用default方法
*/
obj.addTwoNumbers(10, 21);
}
}
Output:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method addTwoNumbers(int, int) from the type Addition is not visible
at xyzpackage.Test.main(Test.java:12)
2.private访问修饰符
private修饰符的范围仅限于类。
私有数据成员和方法只能在类中访问
类和接口不能声明为私有
如果一个类有私有构造函数,那么你就无法从类外部创建该类的对象。
让我们看一个例子来理解这个:
此示例抛出编译错误,因为我们尝试在类Example中访问类ABC的私有数据成员和方法。
私有数据成员和方法只能在类中访问:
class ABC{
private double num = 100;
private int square(int a){
return a*a;
}
}
public class Example{
public static void main(String args[]){
ABC obj = new ABC();
System.out.println(obj.num);
System.out.println(obj.square(10));
}
}
Output:
Compile - time error
3.protected访问修饰符
protected数据成员和方法只能由同一个包的类和任何包中的子类访问。
您还可以说protected访问修饰符类似于默认访问修饰符,但有一个例外,它在子类中具有可见性。
类不能声明为protected。
此访问修饰符通常用于父子关系。
Java中的protected访问修饰符示例
在此示例中,另一个包中存在的类Test能够调用addTwoNumbers()声明protected方法。
这是因为Test类扩展了类Addition,而protected修饰符允许访问子类中的protected成员(在任何包中)。
Addition.java
package abcpackage;
public class Addition {
protected int addTwoNumbers(int a, int b){
return a+b;
}
}
Test.java
package xyzpackage;
import abcpackage.*;
class Test extends Addition{
public static void main(String args[]){
Test obj = new Test();
System.out.println(obj.addTwoNumbers(11, 22));
}
}
Output:
33
4.public访问修饰符
可以从任何地方访问声明为public的成员,方法和类。
此修饰符不对访问权限施加任何限制。
java中的public访问修饰符示例
让我们看一下上面看到的相同的例子,但这次方法addTwoNumbers()有public修饰符,类Test能够访问这个方法,甚至不需要扩展Addition类。
这是因为public修饰符随处可见。
Addition.java
package abcpackage;
public class Addition {
public int addTwoNumbers(int a, int b){
return a+b;
}
}
Test.java
package xyzpackage;
import abcpackage.*;
class Test{
public static void main(String args[]){
Addition obj = new Addition();
System.out.println(obj.addTwoNumbers(100, 1));
}
}
Output:
101
让我们以表格形式查看这些访问修饰符的范围:
原文地址: