Java的访问权限知识

来源:互联网 发布:nginx 日志记录真实ip 编辑:程序博客网 时间:2024/04/28 19:36

在代码编写过程中,我们需要隐藏一些具体实现,进行访问控制。通过访问控制,可以阻止对象的滥用。

Java提供了访问权限修饰词,从大到小包括  public,protected,包访问权限(没有关键词) 和private,下面看下他们的权限范围。

 关键词 同一个类 同包不同类   不同包 private     ★   default     ★     ★  protected     ★     ★  子类★ public     ★     ★     ★

 public:        任何其它类、对象只要可以看到这个类的话,那么它就可以存取变量的数据,或使用方法。
 protected:同一类,同一包可以使用。不同包的类要使用,必须是该类的子类。
 private:    不允许任何其他类存取和调用,除非内部类。
 friendly(default,前边没有修饰字的情况):在同一程序包中出现的类才可以直接使用它的数据和方法.
   
1.先看一下第一个访问权限public:

无论是谁在哪里,都可以访问该成员。

当然这个对于默认包就行不通了Jdk1.5开始就不支持import default package;只有同在默认包下的才可以访问

2.接下来看protected:(继承访问权限)

同一个包下面的类都可以访问,不同包是无法访问,但是在不同包下面,是该类的子类就可以访问protected修饰的变量和方法

3.接下来看default(包访问权限):

这个意味着只能当前包中调用。

4.最后是private:

除了包换该成员的类外,其他任意类无法访问这个成员,除非内部类,可以访问外部类的任意成员。
private 用来声明构造器的话,我们就不能通过构造器来创建对象了,但是我们可以通过一个静态方法来调用这个构造器来创建对象。Soup1是通过一个静态方法实现的,而创建Soup2是使用了单例模式。

class Soup1 {
 private Soup1() {
  System.out.println("Soup1");
 }

 public static Soup1 makeSoup() {
  return new Soup1();
 }
}

class Soup2 {
 private Soup2() {
  System.out.println("Soup2");
 }

 private static Soup2 soup = new Soup2();

 public static Soup2 getSoup() {
  return soup;
 }
}

public class Lubch {
 public static void main(String[] args) {
  Soup1.makeSoup();
  Soup2.getSoup();
 }
}

Ps: 类的访问权限。(只允许使用public  和 默认的)
1.每一个编译单元(.java文件)都只能有一个public 类 这表示,每一个编译单元都有单一的公共接口,用public类来实现,而如果有多个public类的话,会编译出错。
2.public类的名称必须和文件名一致,大小写神马的都要一样。
3.虽然不常用,但是编译单元完全不带public类也是可以的,这时候文件名就可以随意命名。
原创粉丝点击