Java基础深度总结:访问权限

流过泪的眼睛会更明亮,滴过血的心灵会更坚强。

1.访问权限概述

访问权限控制: 指的是本类及本类内部的成员(成员变量、成员方法、内部类)对其他类的可见性,即这些内容是否允许其他类访问。

  • 类可见表示其它类可以用这个类创建实例对象
  • 成员可见表示其它类可以用这个类的实例对象访问到该成员

使用访问权限控制的原因:

  • 为了使用户不要触碰那些他们不该触碰的部分,这些部分对于类内部的操作时必要的,但是它并不属于客户端程序员所需接口的一部分。

  • 为了让类库设计者可用更改类的内部工作方式,而不必担心会对用户造成重大影响。

Tip:
      设计良好的模块会隐藏所有的实现细节,把它的 API 与它的实现清晰地隔离开来。模块之间只通过它们的 API 进行通信,一个模块不需要知道其他模块的内部工作情况,这个概念被称为信息隐藏或封装。因此访问权限应当尽可能地使每个类或者成员不被外界访问。

2.Java中的四种访问权限
访问权限本类本包的类不同包子类不同包非子类
public
protected
default
private
  • public: 所修饰的类、变量、方法,在内外包均具有访问权限;
  • protected: 所修饰的成员,对所有子类是可访问的,但只对同包的类是可访问的,对外包的非子类是不可以访问,protected在子类中等同于public,在不同包非子类中相当于private;
  • 包访问权限(default): 只对同包的类具有访问的权限,外包的所有类都不能访问;
  • private: 所修饰的成员只能在本类中访问;

因此,从访问权限大小来看:public > protected > 包访问权限(default)> private

3.使用场景

(1)外部类的访问控制

外部类(外部接口)的访问控制权限只能是public 或 包访问权限(default)。

//public 权限的外部类
public class OuterClass {
}

//default 权限的外部类
class OuterClass2 {
}

//public 权限的外部接口
//public interface OuterInterface{
//}

//default 权限的外部接口
interface OuterInterface2{  
}

public修饰的外部类(外部接口)可被任意其他类访问,包访问权限(default)的外部类(外部接口)只能被同一包下的其他类访问。

(2)类中成员的访问控制

类中成员:成员变量、成员方法、成员内部类(内部接口)可以使用所有的访问控制权限;而局部成员:局部变量、局部内部类【定义在方法体中的内部类】是没有访问控制的,因为局部成员只在其作用域内起作用,不可能被其他类访问到。

public class OuterClass {
   
    public int aa; //可以被所有的类访问
    protected boolean bb; //可以被所有子类以及本包的类使用
    
    void cc() { //default 访问权限,能在本包范围内使用
        
         //局部成员变量,编译无法通过
  		  public int amount;
  		  //局部内部类
 		  class customer{
   		 }

    }
    
    //private权限的内部类,即这是私有的内部类,只能在本类使用
    private class InnerClass{
        
    }
}

Tips:

  • 抽象方法不能用private 来修饰,也即抽象方法不能是私有的,否则,子类就无法继承实现抽象方法。

(3)接口成员的访问权限

接口中所有成员的访问权限都是public的。

(4)构造器的访问权限

  • private:一般是不允许直接构造这个类的对象,再结合工厂方法(static方法),实现单例模式。注意:所有子类都不能继承构造器私有的类。
  • 包访问控制:这个类的对象只能在本包中使用,外包的类不能继承这个类。
  • protected :就是为了能让所有子类继承这个类,但是外包的非子类不能访问这个类。
  • public :对于内外包的所有类都是可访问的。

注意: 构造方法有点特殊,因为子类的构造器初始化时,都要调用父类的构造器,所以一旦父类构造器不能被访问,那么子类的构造器调用失败,意味子类继承父类失败!

Tips:

  • 在子类中不能通过父类对象来访问父类的protected属性和方法。
  • 默认构造函数的访问权限与该类相同。

参考博客:https://juejin.im/post/5ad2a8d96fb9a028be366de1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值