访问控制权限

Java 有四个访问权限修饰符,分别是public protected default private。这些修饰符用来修饰类、属性和方法,一共也就这三种情况。建议在阅读以下内容时,配合 IDE 工具的智能提示进行验证。

疑问:为什么要有访问控制权限这种东西,它能用来干嘛?给个保证安全性的解释就完了???难道这样解释还不够吗?

用来修饰类

  • public 修饰的类,表示完全公有的。只要是这个项目下,任何地方的类中都可以使用它,如果在不同包下,使用 import 导入下即可。
  • protected 不可以用来修饰外部类,但是在一个类的内部类是可以使用 protected 修饰的,内部类是外部类的一个组成部分,同样可以被它的子类继承。这里新增加的补充内容启示,笔记应该反复查看,曾经的笔记可能有错误或者不完善,后续应该不断的修改,这就是写电子档笔记的好处。
  • default 修饰的类,表示在同一个包下的类中都可以使用,但是其他包下的类中无法使用它,因为根本就见不到。
  • private 修饰的类,叫做私有类,只有在本类中才可见,其他类无法使用。

用来修饰属性

这里讲的是实例属性,实例属性只能通过对象引用才能够使用。

  • public 修饰的属性,表示在这个项目下,任何地方的类中只要持有这个类对象的引用就可以使用它。前提当然是这个类能够访问到对象所属的类,不然怎么可能持有这个对象的引用呢?其他同理!
  • protected 修饰的属性,在同一个包下,任何一个类中只要持有这个类的引用就能够使用它。不同包下,即便是继承关系也无法通过这个类对象的引用使用这个属性。但是如果是继承关系,那么这个类中可以通过 this 指针来使用这个属性,这是因为子类继承了父类的属性。这是两个完全不同的概念,不冲突。
  • default 修饰的属性,在同一个包下,任何一个类中只要持有这个对象的引用就可以访问它,不同包下尽管持有这个对象的引用也无法使用这个属性,而且即便是继承关系也无法通过 this 指针使用它
  • private 修饰的属性,只能在本类中使用,其他类都无法使用到。

用来修饰方法

这里讲的是实例方法,实例方法只能通过对象引用才能够使用。

  • public 修饰的方法,表示在这个项目下,任何一个类中只要持有这个类对象的引用就可以使用这个方法。
  • protected 修饰的方法,在同一个包下,任何一个类中只要持有这个类对象的引用来使用它。但是在不同包下,即使是继承关系也无法通过这个类对象的引用使用它。但是在这个类中可以通过 this 指针使用这个方法,这是因为子类继承了父类的方法。对于 JDK 中提供的类也是同样成立的,废话,JDK 提供的类就能够特殊对待吗?比如 Object 类有一个protected void finalize()throws Throwable 方法就是 protected 修饰的,任何对象都是无法通过引用来调用这个方法的,只能在类的内部通过 this 指针调用。
  • default 修饰的方法,在同一个包下,任何一个类中只要持有这个类对象的引用就可以使用它。在不同包下,即使是继承关系也无法通过这个类对象的引用使用它。而且即便是继承关系也无法通过 this 指针使用它,但是同一个包下的继承关系还是可以通过 this 指针使用它的。这说明是因为不同包下导致访问权限的问题,而不是不同包下就继承不到了
  • private 修饰的方法,只能在本类中使用,其他类中都无法使用到。

总结:

实例属性、实例方法都是依赖于具体对象的,所以不能脱离对象来谈访问权限。Java 中任何代码都是在类中的,所以也不能脱离类来谈访问权限。因此,在谈论访问权限的过程中,首先要明确是在哪个类中,其次要明确这是通过类对象的引用来使用的方法或属性。

包真的是一个分水岭啊。同一个包下无论是 protected 还是 default 都可以通过类对象的引用访问属性和方法,但是在不同的包下是不可能访问得到的。而且,对于继承也是如此,同一个包下子类可以通过 this 就能够访问到protected 和 default 修饰的属性和方法,但是在不同包下,子类只能访问到 protected 修饰的属性和方法,default 修饰的也不行。

public 和 private 都没有问题,很清晰明了。唯独 protected 和 default 修饰的属性和方法有点绕,以前好像一直没深究过这个问题,这块都不清楚。这次弄清楚了,也不知道什么时候会忘记,什么时候又能够用得上呢。

正常情况下,大部分都是采用 public 和 private 配合使用,default 和 protected 用的好像并不多诶,以后慢慢积累它的使用场景。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容