可见范围html
权限的含义应该理解为控制范围,要把它理解成一个限制范围的空间,更为准确的说叫作可见范围java
访问控制的等级,从最大权限到最小权限依次为:public、protected、包访问权限(没有关键词)、和privateoracle
简单说就是:spa
示例:code
package test.b; import test.a.Super; public class SubClass extends Super{ public static void main(String[] args) { SubClass subClass = new SubClass(); subClass.publicFun(); subClass.protectedFun(); } }
打印信息:htm
publicFun
protectedFun
子类位于不一样的包中,能够访问公有方法,能够访问protected方法 不能访问默认的包访问权限以及私有的对象
额外的例子:blog
package test.b; import test.a.Super; public class SubClass extends Super { public static void main(String[] args) { Super superClass = new Super(); superClass.publicFun(); superClass.protectedFun(); } }
编译器直接报错继承
若是非要执行,也是直接报错文档
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method protectedFun() from the type Super is not visible
at test.b.SubClass.main(SubClass.java:12)
相信也有很多人人把上面这种形式的代码理解为:子类中访问父类的protected方法
而且以为很奇怪,而且认为 子类不一样包中并不能访问父类的protected方法
其实这是概念错了
虽然是在子类中,可是倒是使用父类的对象,调用父类的protected方法
这是在不一样包中,访问protected方法 固然是错误的
protected的含义是指子类能够访问,说的是子类直接访问父类的protected方法
而不是说子类中,能够调用父类的对象访问父类的protected方法
子类能够访问,能够在子类访问不是一个概念
你能够访问和在你家访问显然差异很大
总结:
public 什么都不用管,谁均可以用
private 只有本身本类能够用,本类天然限定到某个Class定义范围,哪怕你定义类或者子类在同一个文件中,都是白扯
默认的包访问权限 同一个包中,无论其余条件,管你是否是子类都不要紧的,不要本身去混淆
protected 就是默认的包访问权限扩展了一下, 子类对象能够访问,无论是否是同一个包,而不是在子类中用父类对象访问
关于protected关键点在于:
先看下官方文档中的说明:
地址:https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
A subclass inherits all the members (fields, methods, and nested classes) from its superclass. Constructors are not members,
A subclass inherits all of the public and protected members of its parent
A subclass does not inherit the private
members of its parent class. However, if the superclass has public or protected methods for accessing its private fields, these can also be used by the subclass.
子类继承父类全部的成员 包括 属性方法以及嵌套类,不包括构造方法
子类继承全部的public和protected 的成员
子类不继承私有的成员,不过若是父类中有public或者protected 方法访问私有成员,子类可使用
子类继承了父类的protected方法,因此子类有这个方法,因此子类可使用,可是子类是不能读取某个父类对象的保护方法的(在包外)
继承是继承的结构,跟任何具体的对象的数据不要紧,因此子类中不能建立父类的对象而后调用父类的protected方法,不能在包外访问protected方法
可是若是父类的方法是protected static的,能够在子类中建立父类对象而后调用方法
由于子类是继承的父类的,着重点在于类,继承了类的成员,类的,类的