Java的访问修饰符

Java中的访问修饰符定义了变量,方法,构造函数或类的可访问性(范围)。
Java中有4种访问修饰符:

  • Public
  • Private
  • Protected
  • Default

你不必明确地使用默认修饰符。如果您不提供Public,Private和Protected,则JVM将使用默认修饰符。

Public修饰符

Public修饰符表示任意Java类都可以访问。如果您将类设置为public,那意味着该类在任何地方都可用。
让我们来看看以下例子:

  • 在org下创建一个名叫A.java的类
package org;

public class A {

    public int a;

    public A(int a) {
        this.a = a;
    }

    public void methodA() {
        System.out.println("In method of class A");
    }
}
  • 在org下创建一个名叫B.java的类
package org;

import org.A;

public class B {

    public static void main(String args[]) {
        A objA = new A(30);
        objA.methodA();
        System.out.println("Value of variable a is: " + objA.a);
    }
}

当你运行上面程序时,你将会得到以下输出结果:

In method of class A
Value of variable a is: 30

Private修饰符

Private访问修饰符只能在类内部访问。
除非嵌套类,否则不能使用private和protected类。
让我们通过一个例子来理解它:

package org;

public class A {

    private int a;

    public A(int a) {
        this.a = a;
    }

    private void methodA() {
        System.out.println("In method of class A");
    }
}
public class B {

    public static void main(String args[]) {
        A objA = new A(30);
        objA.methodA();  // 第20行
        System.out.println("Value of variable a is: " + objA.a); // 第21行
    }
}

你将在第20和21行得到编译错误,因为类B无法访问类A的私有变量或方法。

默认修饰符

如果你不设置任何访问权限,则JVM将其视为默认访问权限。如果使用默认访问修饰符,则当前类包之外的类将无法访该类的方法,变量或该类。

  • 在org中创建一个名为DefaultAccess.java的类
package org;

public class DefaultAccess {
    int a;

    public DefaultAccess(int a) {
        this.a = a;
    }

    void methodA() {
        System.out.println("In method of class A");
    }
}
  • 在com中创建一个名为B.java的类
package com;

import org.DefaultAccess;

public class B {
    
    public static void main(String args[]) {
        DefaultAccess obj = new DefaultAccess(20);
        obj.methodA(); //第9行
        System.out.println("Value of variable a is: " + obj.a); //第10行
    }
}

在上面类B中,你将在第9行和第10行得到编译错误,因为我们试图在包“org”之外访问类DefaultAccess的变量a和方法methodA.

Protected修饰符

Protected访问修饰符只能通过继承在同一个包中或包之外访问。
让我们通过一个例子来理解它:

  • 在com中创建一个名为ProtectA.java的类
package com;

public class ProtectA {
    protected int a;

    protected ProtectA(int a){
        this.a=a;
    }

    protected void methodA() {
        System.out.println("In method of class A");
    }
}
  • 在org中创建一个名为ProtectB.java的类
package org;

import com.ProtectA;

public class ProtectB extends ProtectA {
    ProtectB(int a) {
        super(a);
    }

    public static void main(String args[]) {
        ProtectB objB = new ProtectB(20);
        objB.methodA();
        System.out.println("Value of variable a is: " + objB.a);
    }
}

当你运行上面程序时,你将会得到以下输出结果:

In method of class A
Value of variable a is: 20

正如你所看到的,我们可以通过继承访问ProtectA的变量a和methodA。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,770评论 19 139
  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 4,670评论 1 44
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,922评论 18 399
  • 由于我也怀揣着一个创业的梦想,想对当今互联网有关的事件有更多的了解,所以参加了本次的公开课。 今天主要的感想就是:...
    YUOMUREN阅读 461评论 3 3
  • 10分钟看懂29万字的《金字塔原理》 【李叫兽】你有多久,没有死磕过一个问题? 写文案前,记得列个清单【李叫兽-南...
    Rongoo阅读 193评论 0 0

友情链接更多精彩内容