美文网首页
Java的访问修饰符

Java的访问修饰符

作者: weiliping | 来源:发表于2018-06-02 22:35 被阅读0次

    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。

    相关文章

      网友评论

          本文标题:Java的访问修饰符

          本文链接:https://www.haomeiwen.com/subject/tncdsftx.html