Java教程

Java 访问修饰符

Java中的修饰符有两种: 访问修饰符非访问修饰符
Java中的访问修饰符指定字段,方法,构造函数或类的可访问性或范围。我们可以通过在其上应用访问修饰符来更改字段,构造函数,方法和类的访问级别。
Java访问修饰符有四种类型:
Private: 私有修饰符的访问级别仅在该类之内。不能从班级外部访问它。 Default: 默认修饰符的访问级别仅在包中。不能从软件包外部访问它。如果您未指定任何访问级别,它将是默认级别。 Protected: 受保护的修饰符的访问级别通过子类在程序包内和程序包外。如果您不创建子类,则无法从包外部对其进行访问。 Public: 公共修改器的访问级别无处不在。可以从类内部,类外部,包内部和包外部对其进行访问。
有许多非访问修饰符,例如 static, abstract, synchronized, native, volatile等。在这里,我们将仅学习访问修饰符。

了解Java访问修饰符

让我们通过一个简单的表来了解Java中的访问修饰符。
访问修饰符 class中 package中 子类package外 package外
Private Y N N N
Default Y Y N N
Protected Y Y Y N
Public Y Y Y Y

1)Private

私有访问修饰符只能在该类中访问。
私有访问修饰符的简单示例
在此示例中,我们创建了两个类A和Simple。一个类包含私有数据成员和私有方法。我们正在从类外部访问这些私有成员,因此会出现编译时错误。
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);
        //Compile Time Error obj.msg();
    //Compile Time Error }
}

私有构造函数的作用

如果将任何类构造函数设为私有,则无法从外部创建该类的实例班级。例如:
class A{
    private A(){
    }
    //private constructorvoid msg(){
        System.out.println("Hello java");
    }
}
public class Simple{
    public static void main(String args[]){
        A obj=new A();
    //Compile Time Error }
}

注意: 除嵌套类外,其他类不能是私有的或受保护的。


2)Default

如果您不使用任何修饰符,则将其视为 默认值。默认修饰符只能在包中访问。不能从软件包外部访问它。它提供了比私有更多的可访问性。但是,它比受保护的和公开的更具限制性。
默认访问修饰符的示例
在此示例中,我们创建了两个包pack和mypack。我们正在从其包的外部访问A类,因为A类不是公共的,因此无法从包的外部对其进行访问。
//save by A.javapackage pack;
class A{
    void msg(){
        System.out.println("Hello");
    }
}
//save by B.javapackage mypack;
import pack.*;
class B{
    public static void main(String args[]){
        A obj = new A();
        //Compile Time Error obj.msg();
    //Compile Time Error }
}
在上面的示例中,类A的范围及其方法msg()是默认的,因此无法从程序包外部对其进行访问。

3)Protected

受保护的访问修饰符可以在程序包内和外部访问包,但仅通过继承。
受保护的访问修饰符可以应用于数据成员,方法和构造函数。它不能应用于课程。
它提供了比默认修饰符更多的可访问性。
受保护的访问修饰符示例
在此示例中,我们创建了两个包pack和mypack。 A类包软件包是公共的,因此可以从包外部进行访问。但是该程序包的msg方法被声明为受保护的,因此只能通过继承从类外部访问它。
//save by A.javapackage pack;
public class A{
    protected void msg(){
        System.out.println("Hello");
    }
}
//save by B.javapackage mypack;
import pack.*;
class B extends A{
    public static void main(String args[]){
        B obj = new B();
        obj.msg();
    }
}
Output:Hello

4)Public

公共访问修饰符随处可见。在所有其他修饰符中,它具有最广泛的范围。
公共访问修饰符示例
//save by A.javapackage pack;
public class A{
    public void msg(){
        System.out.println("Hello");
    }
}
//save by B.javapackage mypack;
import pack.*;
class B{
    public static void main(String args[]){
        A obj = new A();
        obj.msg();
    }
}
Output:Hello

具有方法覆盖的Java访问修饰符

如果要覆盖任何方法,则覆盖方法(即在子类中声明的方法) )的限制不得更多。
class A{
    protected void msg(){
        System.out.println("Hello java");
    }
}
public class Simple extends A{
    void msg(){
        System.out.println("Hello java");
    }
    //C.T.Error public static void main(String args[]){
        Simple obj=new Simple();
        obj.msg();
    }
}
默认修饰符的限制比受保护的限制更大。这就是为什么存在编译时错误。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4