彻底理解Java四种访问权限关键词private,默认,protected,public以及“非子类可见”等概念

对四种访问权限的理解

private,默认,protected,public这四种,一个比一个更开放

java中最核心的就是方法,方法是实现目的的最直接手段。无论是自己写的功能方法,还是常见的main,这些方法都是建立在一个类中的,也就是一开始一定要选择一个类去执行代码,在这个类中去展开属性和方法的使用,比如一个单独的.java文件,一定有一个(public)class,里面往往有一个main函数

很多情况下需要在一个类A中去调用另一个类B的属性和方法(初始化函数也是方法),比如下图高亮区域
在这里插入图片描述

这里就是在PackageTest1类中的main方法里调用了Animal类的初始化函数和run()方法,调用成功,就叫说Animal的这个方法对PackageTest1可见不成功就叫不可见(如果报错说run()方法不存在或不能用,则不可见)

成不成功(可见或不可见)取决于这两个类之间的关系以及调用属性或方法的访问权限,访问权限就是那四种,而两个类的关系有这么几种

父类与子类关系:比如Animal类和Cat类

非子类关系:比如PackageTest1类和Animal类,风马牛不相及的两个类,
毫无继承等关系,只是纯粹的需要在包测试类中调用动物类的方法

同包关系:两个类同属于一个包package中

不同包关系:不属于同一个包的两个类,想要在A包中调用B包的类方法,
需要在A包某个.java文件中import packageB才行

最后是分析四种访问权限的分析
在这里插入图片描述

首先是private成员,这个成员啥意思呢?就是说在一个类Animal的定义区,会定义若干属性和方法,属性和方法都叫做成员,如果我们在定义类内属性时写private int a=6;那么就为这个类定义了一个私有属性,同理private void run(){}就是一个私有方法

但是注意类class的访问权限关键词只可以是默认或者public

同一类中可见啥意思?以那个私有变量a为例,如果在Animal的定义部分的属性区或方法里需要调用这个a,比如run(){print(’‘speed is’’+a)}那么没关系,尽管用就是了,私有就是说这个属性是类内才能用的。方法也是个到底,可以在类的定义区内的别的方法里调用私有方法。但是一旦出了这个类,比如我现在到了PackageTest1类里去实例化Animal,再调用a属性,那么不行。这个属性私有了,你PacageTest1没法用,只有我Animal类才可以用

同一个包中对子类不可见啥意思?就是说,假如Animal类和Cat extends Animal类都在包creature中,我现在要在Cat类里面去调用Animal私有的属性a和方法run(),那么抱歉,不行,即使你是子类也不让你用,因为这是private权限。

但如果a和run()是用别的三种访问权限修饰的话,同包的子类仍然可以调用,也就是可见

同包对非子类不可见啥意思?就比如PackageTest1类和Animal类,都在example包下,风马牛不相及的两个类,毫无继承等关系,但是我在包测试中定义了一个动物实例,现在想调用实例的a属性和run()方法,却由于他俩是Animal的private属性,失败了

把访问权限换成另外三种,就允许调用。也就是可见了

不同包对子类不可见啥意思?p1包的Animal有个私有属性a和私有方法run(),p2包里class Cat extends Animal{},如果想在Cat中调用属性a和run()就会失败,换成默认权限也会失败

把访问权限换成protected或public就可以成功调用(可见了)

不同包中对非子类不可见啥意思?就是说,p1包的Animal有个私有属性a和私有方法run(),p2包里有一个风马牛不相及PackageTest1类,毫无继承等关系,我现在要在包测试类里面实例化Animal,再调用其属性a和方法run(),报错。即使把a与run()的权限改成默认或protected还是会报错

只有把权限改成public才可以让不同包里毫无关系的两个类的能够互相调用属性和方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值