Java中的访问限制符

时间:2021-12-14 02:24:58

package:包访问权限

如果不提供任何访问权限修饰词,则意味着它是包访问权限

默认访问权限没有任何关键字,但通常是指包访问权限(有时也表示为friendly)。这意味着包中所有其他类都可以访问这个成员或方法,但是这个包之外的所有类不可以访问

例:

com.notes.packages.test.Info

package com.notes.packages.test;

public class Info {

    void print() { System.out.println("default method -- print()"); }

}

 

com.notes.packages.test.PublicDemo01

package com.notes.packages.test;

public class PublicDemo01 {

    public static void main(String[] args) {

        Info x = new Info();

        x.print();

    }

}

PublicDemo01和Info在同一个包下,可以访问Info的default级别的方法——print()。

 

com.notes.packages.PublicDemo02

package com.notes.packages;

import com.notes.packages.test.Info;

public class PublicDemo02 {

    public static void main(String[] args) {

        Info x = new Info();

        // x.print(); // Error

    }

}

PublicDemo02和Info不在一个包下,不可以访问Info的包访问权限级别的方法——print()。

public:接口访问权限

使用public关键字,就意味着被声明的成员或方法对所有人都是可以访问的

例:如果将default级别权限例子中的print()方法权限设为public,则PublicDemo02可以访问。

package com.notes.packages.test;

public class Info {

    public void print() { System.out.println("public method -- print()"); }

}

private:无法访问

使用private关键字,就意味着被声明的成员或方法,除了本类,其他任何类都无法访问

应用场景:单例模式

protected:继承访问权限

新类(称之子类或派生类)通过继承可以复用一个现有类(称之父类或基类),然后扩展基类的成员、方法。有时,基类的创建者会希望某个特定成员,将它的访问权限赋予派生类而不是所有类。public无法做到这一点,为此,引入了protected来完成这一工作。protected也提供包访问权限,也就是说,派生类以及相同包内的其他类都可以访问protected成员或方法

例:子类继承父类后,可以访问父类的protected成员。

class Father {

    private String a = "private";

    protected String b = "protected";

    public String c = "public";

};

 

class Son extends Father {

    public void print() {

        // System.out.println("element a:" + super.a); // Error

        System.out.println("element b:" + super.b);

        System.out.println("element c:" + super.c);

    }

}

 

public class ProtectedDemo01 {

    public static void main(String args[]) {

        Son sub = new Son();

        sub.print();

    }

};

总结

前面各个例子中展示了类的成员、方法都可以用各种权限修饰词来修饰。

除此之外,还有一些需要注意的点:

(1)     静态成员、静态方法的权限修饰词的用法和普通成员、方法一样。

(2)     类虽然也可以被修饰词修饰,但是不可以用privateprotected两个权限修辞词。

(3)     有些书中将包访问权限又叫做默认访问权限。个人不建议这么去记,因为这很容易与Java Se8中新特性——default关键字混淆。这个关键字只能用于Interface,作用是允许程序员在Interface中定义接口的默认具体实现(以往的JDK版本是不允许这样的,你只能在接口中声明方法)。

            Java中的访问限制符