java类的访问权限

java中,

类的权限有两种:

  • 包访问权限
  • public

数据成员的权限有四种:

  • public
  • protected
  • default(缺省)
  • private

注意,类的权限不可以是private(这会使得除了该类外,其他任何类都不可以访问它),也不可以是protected

一、类的权限

在说类之前,先明确一下编译单元的概念,一个java源文件就算作一个编译单元

包访问权限 < public权限。拥有包访问权限的类,对同一个包内的其他类,可以看做表现为"public",
而对包外部的类,则可以看做表现为"private"。

包访问权限

在写了一个java源文件后,可以在它的开头加上package <包名>来将它划分到指定包。
如果不指定,那么它就划分为默认包,可以认为它的包名为"",也即是空。

在创建一个类后,如果不加访问控制符,那么这个类就拥有包访问权限。
拥有包访问权限的类,能被同一个包内的其他类访问,但不能被包外部的代码访问。

不指定包名,则源文件属于默认包(即不指定包名),且是当前目录的默认包。位于相同目录的源文件,如果不指定包名,则属于同一目录的默认包,默认包为同目录的所有其他文件提供了包访问权限。

举个例子:

//Animal.java
package com;
class Animal{
    public Animal(){
    }
}

这里的Animal类所在文件指定了包名com,所以它属于包com
它的class前没有权限控制符,所以它拥有包访问权限。
此时如果com中有另一个类Dog

//Dog.java
package com;
class Dog{
    Animal dog;
    public Dog(){
        dog = new Animal();
    }
}

那么它可以访问到这个类,因为Animal有包访问权限。

public

继续上面的例子,如果有另一个类不在com中,如:package net,那么这个类中无法访问到Animal

如果想要访问,则需要在class Animal前加上public,此时Animal不再局限于包访问权限,它既可以被包内的其他类访问,也可以被外部的类访问。

二、数据成员权限

  • public
    • 所有类(同包的其他类、外部的类)都可访问。
  • protected
    • 继承类(extends)可以访问,但是其他类不能访问。
  • 包访问权限(什么都不写)
    • 类自己和同包的类可以访问。
  • private
    • 只有该类自己可以访问,其他类(包括同包的其他类)都不可以。

三、补充

  • 一个java源文件只能有一个public类,可以有多个拥有包访问权限的类。
  • public类的名字必须与源文件名前缀相同,大小写也要一样,否则会编译出错。
    • 如:public class LittleDog,则源文件必须为LittleDog.java
  • 包名一般全部都小写。
  • 包名必须与其放置的系统的目录(文件夹)对应,否则使用时会运行时报错:找不到类(哪怕这个类就在相同的目录下)。
    • 如一个源文件指定了package com.dog;,则它必须位于com/dog/的路径下。
    • 检验是否是由于路径放置错误的一个方法是将package xxx;去掉再运行,如果可以运行,那么说明是 包名和目录路径不对应 导致的错误。

四、总结

在查看一个权限时:

  • 首先看类的权限,判断是否对包外部可见:
    • 若为public,则外部可以访问;
      • 再看类内数据成员的访问控制符,
        • public
          • 所有人都能访问
        • protected
          • 继承类可访问。
        • 包访问权限
          • 类自己和同包的类可以访问。
        • private
          • 只有该类能访问。
    • 否则不能,结束判断。

在这里插入图片描述

参考书籍:

  • [1] Eckel B. Thinking in Java[M]. 4. 机械工业出版社, 2018年1月 :109,124.
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

barbyQAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值