java基础之——访问修饰符(private/default/protected/public)
java基础之——访问修饰符(private/default/protected/public)
1. 访问修饰符介绍
Java编程语言中的访问控制符共有四种类型:私有(private)、默认(无特定关键字)、受保护(protected)和公共(public)。这些修饰符分别代表着不同的访问权限和可见性规则。
元素的访问权限,从严格到宽松依次排列为private、default、protected以及public。对于类A与类B,若它们的访问修饰符均为public,当类A中的某个方法试图调用类B中的另一个方法时java基础之——访问修饰符(private/default/protected/public),可以通过以下图表来判定其访问是否可行。
如下举例说明四种修饰符对元素的访问限制:
1.1. private
在类B中尝试访问同包内类A的私有方法protected java,会导致编译阶段出现错误提示。
package p1
class A {
private String getName(){
return "jim";
}
public void display(){
在当前类中,通过System.out.println()方法输出对象的名称;对于本类中的私有方法,同类访问是被允许的。
}
}
package p1
class B{
public void display(){
A a = new A();
在编译过程中,尝试调用类A中定义的私有方法时,系统输出提示信息:输出a对象所拥有的名称。
}
}
单例模式中,private关键字被广泛运用,它使得构造函数只能被类内部访问;通过将构造函数设置为private,确保了外部无法直接实例化该类。
public class Singleton {
/**
将构造函数设定为私有属性,从而阻止外部类在调用时直接利用构造函数来创建对象实例。
*/
private Singleton() {
}
/**
* 单例必须通过该方法获取
*/
公开静态方法获取Singleton实例,{
返回实例包装器中的实例。
}
定义了一个私有的静态内部类,名为InstanceWrapper。
Singleton类中的静态常量INSTANCE,其值被赋予了一个新创建的Singleton实例。
}
}
1.2. default
在类C中尝试调用位于不同包中的类A的默认方法时,编译过程中会出现错误提示。
package p1
public class A {
String getName(){
return "jim";
}
}
package p1
public class B{
public void display(){
A a = new A();
在当前包内调用默认方法,输出对象a的名称是允许的。
}
}
package p2
public class C {
public void display(){
A a = new A();
在执行System.out.println(a.getName())这一操作时,由于试图调用类A中的默认方法,编译过程中出现了错误。
}
}
1.3. protected
在类C中尝试调用类A的受保护方法时,编译器将显示错误信息。
package p1
public class A {
protected String getName(){
return "jim";
}
}
package p2
public class B extends A {
public void display(){
输出父类中受保护的函数调用结果,这是被允许的。
}
}
package p2
public class C {
public void display(){
A a = new A();
在编译过程中,尝试执行System.out.println(a.getName())时,由于试图调用类A中受保护的成员方法,程序将出现错误提示。
}
}
1.4. public
无访问限制。
package p1
public class A {
public String getName(){
return "jim";
}
}
package p2
public class B {
public void display(){
A a = new A();
在无任何访问限制的情况下,能够直接调用并输出变量a所关联对象的名称。
}
}
当子类对父类的方法进行隐藏或覆盖时,需要遵守访问修饰符的相关规定。
若子类中的函数对父类中的函数进行了隐藏或覆盖,那么子类函数的访问权限标识符应当与父类相应函数的访问权限标识符保持一致,甚至更为宽松。这一原则是面向对象编程的核心protected java,意味着子类应当被视为对父类的一种扩展和优化,从而赋予子类更高的可访问性。以下是一个具体的例子:
/**
* 父类
*/
class Father {
/**
* 静态方法
*/
确保静态方法不受保护,定义一个静态函数。
}
/**
* 非静态方法
*/
public void method() {
}
}
/**
* 子类
*/
class Son extends Father {
/**
尝试将父类中方法的访问权限修饰符从protected调整为更具限制性的默认访问级别,然而在编译过程中出现了错误提示。
*/
static void staticMethod() {
}
/**
在尝试将方法的访问修饰符从父类的公开(public)级别调整为更具限制性的保护(protected)级别时,编译器出现了错误提示。
*/
protected void method() {
}
}
3. 元素支持的访问修饰符
每个组成部分java基础之——访问修饰符(private/default/protected/public),比如类别、接口、注释、构造函数、成员变量以及成员方法等,都明确或暗示地标注了访问权限的修饰符,然而protected java,并非所有这些组成部分都能使用所有四种访问权限修饰符。
- 随机文章
- 热门文章
- 热评文章