java 修饰符和访问权限介绍
修饰符介绍:
public
使用对象:类、接口、成员变量、方法
介绍:无论它所处在包定义在哪该类(接口、成员)都是可访问
protected
使用对象:成员变量、方法
介绍:成员变量只能在定义它包中被访问,如果在其他包中被访问,则实现这个思路方法类必须是该成员所属类子类
private
使用对象:成员变量、成员方法
介绍:成员变量和方法都只能在定义它类中被访问,其他类都访问不到。对成员变量的进行获取和更改,一般用get() set() public 方法。实现了Java面向对象的封装思想。
friendly(缺省)
使用对象:类、方法、成员变量
介绍:访问权限与protected相似,但修饰类成员时不同包中的子类不能访问。
static
使用对象:方法、成员变量
介绍:修饰变量,称为类变量或静态变量。静态变量是和类存在一起的,每个实例共享这个静态变量.在类加载时初始化。
final
使用对象:类、方法、成员变量
介绍:一旦定义为fina,就不能被修改了。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取不能更改。修饰类是不能派生出子类,修饰方法时,不能被当前子类的方法覆盖
abstract
使用对象:类、接口、方法
介绍:修饰类时,被称为抽象类。不能创建abstract 类的实例。一般被继承,实现抽象方法。类只要有一个abstract方法,类就必须定义为abstract,但abstract类不一定非要保护abstract方法不可
类与类之间的访问:
类型 |
缺省 |
Public |
同一个包中的类 |
可访问 |
可访问 |
不同包中的类 |
不可访问 |
可访问 |
类和类中方法的访问权限
|
Public |
缺省 |
Public |
所有类 |
包中类(含当前类) |
Protected |
包中类(含当前类,所有子类) |
包中类(含当前类) |
Friendly(缺省)(用法和Protected 相识) |
包种类(含当前类) |
包中类(含当前类) |
Private |
当前类(本身) |
当前类(本身) |
类成员访问修饰符与访问能力之间的关系(类成员访问权限)
类型 |
Private |
无修饰 (fiendly) |
Protected |
Public |
同一类 |
可访问 |
可访问 |
可访问 |
可访问 |
同一包中的子类 |
不可访问 |
可访问 |
可访问 |
可访问 |
同一包中的的非子类 |
不可访问 |
可访问 |
可访问 |
可访问 |
不同包中 的子类 |
不可访问 |
不可访问 |
可访问 |
可访问 |
不同包中的非子类 |
不可访问 |
不可访问 |
不可访问 |
可访问 |
继承和权限:
|
Publiic |
无修饰 |
Private |
Protect |
final |
abstract |
static |
类继承 |
可继承 |
只有同一包中的可继承 |
不能修饰 类 |
不能修饰 类 |
不能派生子类 |
一般可继承 |
不能修饰 类 |
方法重载 |
可重载 |
可重载 |
不能重载 |
可重载 |
不可重载 |
可重载 |
可重载(修饰主函数就不能重载了) |
成员变量(属性的隐藏) |
父类属性被隐藏(使用super.获取父类属性) |
父类属性被隐藏(使用super.获取父类属性) |
子类不能直接访问父类的私有变量 |
父类属性被隐藏(使用super.获取父类属性) |
必须付初值 |
不能修饰 成员变量 |
每个实例共享这个类变量 |
注: 无修饰的类中,其他包无法访问,所以他去包中的类无法继承。
abstract 修饰类是的继承权限与修饰类的是public 还是缺省有关。
匿名的内部类是没有名字的内部类。不能extends(继承) 其它类 ,但一个内部类可以作 为一个接口, 由另一个内部类实现。
方法的重载和成员变量属性的覆盖都是在类已被继承之后的情况。
方法重载时,private修饰的方法重写,语法不报错,可以通过编译, 但是调用时不会使用新写的方法。仍然调用父类的方法。