Java基础巩固 – 修饰符
1.Java修饰符
1.1 种类
- 访问修饰符
- 非访问修饰符
2.访问控制修饰符
2.1 意义
访问控制修饰符的存在可以用于保护对类、变量、方法和构造方法的访问
2.2 分类
访问控制修饰符一共有四种权限
- default:在不添加任何修饰符时为default,使用对象:类、接口、变量、方法。
- public:对 所有 类可见。使用对象:类、接口、变量、方法。
- private:在同一类中可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
- protected:对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
总结
修饰符 | 当前类 | 同一包 | 子类(同一包) | 子类(不同包) | 其他包 |
---|---|---|---|---|---|
default | ✓ | ✓ | ✓ | ✕ | ✕ |
public | ✓ | ✓ | ✓ | ✓ | ✓ |
private | ✓ | ✕ | ✕ | ✕ | ✕ |
protected | ✓ | ✓ | ✓ | ✓/✕ | ✕ |
3.访问修饰符功能
3.1 默认访问修饰符(default)
在类、变量、方法或构造函数定义中未使用任何访问修饰符,则就具有默认访问修饰符。默认访问修饰符为包级别,只能在同一包中才能被访问。
3.2 公共访问修饰符(public)
被声明为public的类、方法、构造方法和接口能够被任何其他类访问。若几个相互访问的public类分布在不同的包中,需要导入相应的包后才能访问。同时由于继承性,类所有的公有方法和变量都能被其子类继承。
3.3 私有访问修饰符(private)
私有访问修饰符为最严格的访问级别,被声明为private的方法、变量和构造方法只能被所属类访问,并且类和接口不能被声明为private。声明为私有的访问类型变量只能通过getter和setter函数对其值进行修改。设置私有访问修饰符的目的主要是为了隐藏类的实现细节和保护类的数据。
3.4 受保护的访问修饰符(protected)
- 子类与父类在同一包中:被声明为protected的变量、方法和构造器能被同一个包中的任何其他类访问。
- 子类与父类不在同一包中:在子类中,子类实例可以访问其从父类继承过来的protected方法,但不能访问父类实例的protected方法。
3.5 访问控制与继承
- 父类中声明public的方法在子类中必须为public。
- 父类中声明为protected的方法在子类中只能为protected或public,不能声明为private。
- 父类中声明为private的方法无法被子类继承。
4.非访问修饰符功能
4.1 简介
Java定义了一些非访问修饰符用于拓展其他功能。
- static:用于修饰类方法和类变量
- final:用于修饰类、方法和变量,final修饰的类 不能够被继承,修饰的方法不能被继承类重新定义。修饰的变量为常量,无法被修改。
-abstract:用于创建抽象类和抽象方法。 - synchronized/volatile:用于线程。
4.2 分类
4.2.1 static修饰符
- 静态变量:static关键字用于声明独立于对象的静态变量,无论一个类实例化多少个对象,静态变量只有一份拷贝。静态变量也被称为类变量。局部变量不能被声明为 static 变量。
- 静态方法:static 关键字用来声明独立于对象的静态方法,静态方法不能使用 类的非静态变量。静态方法从参数列表获取数据,并使用这些数据。
4.2.2 final修饰符
- final变量:final表示最终的,即被final修饰的变量被赋值后就不能被重新赋值或更改,并且在修饰时变量必须显示指定初始值。
- final方法:父类中的final方法可以被子类继承,但不能被重写,其目的是为了防止方法中的内容被篡改。
- final类:final 类不能被继承,没有类能够继承 final 类的任何特性。
4.2.3 abstract修饰符
- 抽象类:抽象类 不能实例化,声明抽象类的唯一目的是为了将来对该类进行功能扩展。一个类不能同时被abstract和final修饰。如果一个类包含抽象方法,则该类一定要声明为抽象类。
- 抽象方法:抽象方法是一种没有任何实现的方法,该方法具体实现由子类提供。抽象方法不能被声明成 final 和 static。任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。若一个类包含若干抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。