Java中的修饰符、枚举、抽象类
1.java的权限修饰符
1.1权限修饰符:
是用来控制一个成员能够访问的范围
可以修饰成员变量,方法,构造器,内部类,不同权限修饰符修饰的成员能够被访问的范围将受到限制。
- 四种范围从小到大(private < 缺省(没有修饰符) < protected < public(任何地方都可以访问))

一般我们如何要求:(规范)
- 成员变量一般私有(private)
- 方法一般公开(public)
- 如果该成员只希望本类访问,使用private修饰(private)
- 如果该成员只希望本类,同一个包下的其他类和子类访问,使用protect修饰。

2.final
2.1final的作用
- final关键字是最终的意思,可以修饰(类、方法、变量)
- 修饰类:表明该类是最终类,不能被继承
- 修饰方法:表明该方法是最终方法,不能被重写
- 修饰变量:表明该变量第一次赋值后,不能再次被赋值(有且只有仅能被赋值一次)
2.2final修饰变量的注意
- final修饰的变量是基本类型:那么变量存储的数据值不能发生改变。
- final修饰的变量是引用类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以发生变化的。
3.常量
常量是使用public static final修饰的成员变量,必须有初始化值,而且执行的过程中其值不能被改变。
变量的作用和好处:可以用于做系统的配置信息,方便程序的危害,同时也提高可读性。
- 常量命名规范:英文单词全部大写。
- 多个单词下划线连接起来。
好处就是:如果修改了变量不用到处都修改,比如说学校名称具有唯一性,万一哪天学校改名。不用到处修改,改那个常量就好了。
- 一处定义多处使用
常量的执行原理:
- 在编译阶段会进行“宏替换”,把使用常量的地方全部替换真实的字面量。
- 这样做的好处是让使用常量的程序的执行性能与直接使用字母量是一样的。
- 代码可读性好,实现了软编码形式
4.枚举的概述
4.1枚举是Java中的一种特殊类型(类似数组)
- 枚举的作用:是为了做信息的标志和信息的分类。
4.2定义枚举类的格式
1 | public enum Season { |
4.3枚举的特征
- 枚举类都是继承了枚举类型:java.lang.Enum
- 枚举都是最终类,不可以被继承
- 枚举类的构造器都是私有的,枚举对外不能创建对象。
- 枚举类的第一行默认都是罗列枚举对象的名称的。
- 枚举类相当于是多例模式。
4.4枚举做信息标志和分类
建议使用,因为代码可读性好,入参约束严谨,代码优雅,是最好的信息分类技术!建议使用!(但是项目中好多还是用常量比较多,因为简单,能跑就行)
5.抽象类
简单来说就是一个设计稿,不在里面设计,只是一个蓝图,别的类照着这个蓝图重写方法。
5.1抽象类说明
抽象类:不能使用new关键字来创建对象,他是用来让子类继承的。约束。
抽象方法:只有方法的声明,没有方法的实现,它是用来让子类实现的。
抽象类的作用:抽取共性时,无法确定方法体,就把方法定义为抽象的。
5.2特征和注意事项:
- 类有的成员(成员变量、方法、构造器)抽象类都具备
- 抽象类不能被实例化(不能创建对象)
- 可以有构造方法
- 抽象类不一定有抽象方法,但有抽象方法一定有抽象类。(爸爸不一定有孩子,孩子肯定有爸爸)
- 抽象类的子类有哪些注意?:(1.要么重写抽象类中的所有抽象方法。(通常第一种) 2.要么是抽象类)
- 不能用abstract修饰变量、代码块、构造器。(没有括号)

上图我们可以知道定义一个接口,可以让下面的人好写,如果每个人都写一个方法,但是方法的名称千奇百怪,就会很麻烦,调用就会很痛苦。
(强制子类必须安装这种格式重写,统一的概念)
1 | public abstract void pay(double money); |
- 最重要的特征:得到了抽象方法、失去了创建对象的能力(有得有失)
人话:这个抽象了,所以就不能实例化,存在的意义就是提高开发效率。
5.3final和abstract是互斥关系
abstract定义的抽象类作为模版让子类继承,final定义的类不能被继承。
6.接口
6.1格式:
1 | Public interface 接口名{ |
类只能单继承,接口可以多继承。
接口就是体现规范的思想;约束。
规范一定是公开的,别人才知道。所以用public。
6.2常量格式
- 常量是一定要进行初始化的。
1 | //1.常量 |
6.3抽象方法
由于接口体现规范思想,默认公开的。所以代码层面public abstract可以省略不写。
- 接口是类似抽象类。所以有abstract
- 接口是一种规范,公开的,所以是public
1 | public abstract void run(); |
所以常量也是可以省略不写。
1 | public static final String SCHOOL_NAME = "北京大学"; |
但是是在接口里的,这样才知道不是普通的常量。
6.4接口中成员的特点:

6.5接口的基本使用:被实现

- 接口是用来被类实现的(implements)的,实现接口的类被称为实现类,实现类可以理解成所谓的子类。
格式:
1 | public class 实现类 implements 接口1,接口2... { |

从上面也可以看出,接口可以被类单实现,也可以被类多实现。
接口实现的注意事项:
一个类实现接口,必须重写完全部接口的全部抽象方法,否则这个类需要定义成抽象类。
6.5小结

类和类的关系:单继承
类和接口的关系:多实现
接口和接口的关系:多继承,一个接口可以继承多个接口
- 多继承的作用:规范合并,整合多个接口为同一个接口,便于子类实现。










