Java的访问修饰符

2018-06-02  本文已影响0人  weiliping

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

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

Public修饰符

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

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");
    }
}
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将其视为默认访问权限。如果使用默认访问修饰符,则当前类包之外的类将无法访该类的方法,变量或该类。

package org;

public class DefaultAccess {
    int a;

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

    void methodA() {
        System.out.println("In method of class A");
    }
}
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访问修饰符只能通过继承在同一个包中或包之外访问。
让我们通过一个例子来理解它:

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");
    }
}
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。

上一篇下一篇

猜你喜欢

热点阅读