Java有哪些访问修饰符呢?
Java语言中访问修饰符用于设置类,变量,方法和构造函数的访问级别。
四个不同的访问修饰符为:
- 无关键字(不指定修饰符):对包可见,不需要修饰符。
private
:仅对类内部可见。public
:公开,对外部可见。protected
:对包和所有子类可见。
1. 默认访问修饰符 - 无关键字
默认访问修饰是指没有为类,字段,方法等显式声明访问修饰符。
声明没有任何访问控制修饰符的变量或方法可用于同一包中的任何其他类。
接口中的字段隐式为public static final
,
接口中的方法默认为public
。
如:
可以在没有任何修饰符的情况下声明变量和方法,如
class testClass{
String v= "0.01";
boolean existsFlag() {
return true;
}
}
2. 私有访问修饰符 - private
声明为private
的方法,变量和构造函数只能在声明的类本身中访问。
专用访问修饰符是限制性最强的访问级别。
类和接口不能声明为:private
。
如果类中存在公共getter
方法,
则可以在类中将变量声明为private
。
使用private
修饰符是对象封装自身并隐藏来自外部世界的数据的主要方式。
如:
以下类使用private
访问控制 -
public class testClass{
private String name;
public String getName() {
return this.name;
}
public void setName(String name_) {
this.name= name_;
}
}
这里,testClass
类的name
变量是private
,
所以其他类无法直接检索或设置它的值。
为了使这个变量对外界可用,testClass
类中定义了两个公共方法:getName()
用于返回format
的值,setName(String)
用于设置它的值。
3. 公共访问修饰符 - public
可以从任何其他类访问使用public
声明的类,方法,构造函数,接口等。
所以,可以从属于Java任何类访问在公共类中声明的字段,方法,块。
但是,如果尝试访问的公共类位于不同的包中,则仍需要导入公共类。
由于类继承,类的所有公共方法和变量都由其子类继承。
如:
以下方法使用public
访问控制 -
public static void main(String[] arguments) {
// ...
}
应用程序的main()
方法必须声明为public
。
否则Java解释器无法调用它来运行该类。
4. 受保护的访问修饰符 - protected
在超类中声明受保护的变量,方法和构造函数只能由其他包中的子类或受保护成员类的包中的任何类访问。
受保护的访问修饰符不能应用于类和接口。 方法,字段可以声明为protected
,
但是接口中的方法和字段不能声明为protected
。
受保护的访问使子类有机会使用辅助方法或变量,
同时防止非相关类尝试使用它。
如
以下父类使用protected
访问控制,以允许它的子类覆盖openSpeaker()
方法 -
class testClass{
protected boolean openValue(String t) {
// 实现详细代码...
}
}
class testClass2{
boolean openValue(String t) {
// 实现详细代码...
}
}
Java
在这里,如果将openValue()
方法定义为private
,
那么它将无法从testClass
以外的任何其他类访问。
如果将类定义为public
,那么它将被所有外部世界类访问。
但这里的目的是仅将此方法暴露给它的子类,所以只使用protected
修饰符。
访问控制和继承
强制执行以下继承方法规则 -
- 在超类中声明为
public
的方法也必须在所有子类中都是public
。 - 在超类中声明为
protected
的方法必须在子类中也要声明为:protected
或public
; 不能声明为:private
。 - 声明为
private
的方法根本不能被继承,因此没有规则。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。