day12_我的Java学习笔记 (package包、权限修饰符_private+缺省+protected+public、final、常量、枚举_enum、抽象类_abstract_class_模板方法+final、接口(干爹)_interface_常量+抽象方法_多实现_implements【接口被类实现_实现类】+多继承_接口新增3种方法 、 本节回顾总结)

1.包



IDEA配置自动导包:




2.权限修饰符




同一个类中的,【private、缺省、protected、public】都可以访问
同一个包中的其他类,【private】不可以访问,【缺省、protected、public】都可以访问
不同包下的无关类,【private、缺省、protected】都不可以访问,只有【public】可以访问
不同包下(继承)的子类,【private、缺省】不可以访问,【protected、public】都可以访问
3.final (final:代表已经绝育了!!!)

3.1 final修饰的类,不能被extends


3.2 final修饰的方法,方法不能被重写


3.3 final修饰变量,总规则:变量有且仅能被赋值一次
3.3.1 final修饰局部变量

final修饰的变量是基本类型:那么变量存储的数据值不能发生改变。



3.3.2 final修饰静态成员变量


3.3.3 final修饰实例成员变量

以上创建多个实例,会导致所有的实例对象的name都叫“猪刚鬣”。





4.常量
4.1 常量概述和基本作用



在编译阶段会进行“宏替换”:把使用常量的地方全部替换成真实的字面量。

这样做的好处:让使用常量的程序的执行性能,像直接使用字面量一样。
4.2 常量做信息标志和分类

这里oop-app2目录下,为大家已经准备了一个代码,模拟控制“上”、“下”、“左”、“右”四个方向。
但是上述改成1、2、3、4是硬编码,可读性不好,代码质量不高,总之不是一种优雅的设计方式,所以可以用常量来做信息的标志和分类
5.枚举
常量做信息标志和分类:
虽然可以实现可读性,但是入参值不受约束,代码相对不够严谨。
枚举做信息标志和分类:
代码可读性好,入参约束严谨,代码优雅,是最好的信息分类技术!建议使用!
5.1 枚举的概述

我们这里先对原.java文件进行编译,然后对编译后的.class文件进行反编译,看下反编译后的文件内容:






5.2 枚举的使用场景演示

5.2.1 那么常量作为信息标志,存在什么问题呢?
5.2.2 枚举做信息标志和分类: 代码可读性好,入参约束严谨,代码优雅,是最好的信息分类技术!







不过,实际项目中,还是有很多公司的开发,会选择常量来作为信息标志和分类的。
(主要原因还是这样写比较简单吧,外加还可以额外增加一些bug修复的工作量,毕竟大家都是按工时发工资的,多一些工时,就多一些工资,外加加班多了,有考勤绩效奖励哈~)
6.抽象类
6.1 抽象类概述

- 1.类有的东西,抽象类都有。
- 2.抽象类中可以没有抽象方法,但是有抽象方法的类,必须是抽象类。
- 3.一个类继承了抽象类,必须重写抽象类的全部抽象方法,否则这个类必须定义成抽象类。(一个类实现了接口,必须重写全部接口的全部抽象方法,否则这个类也必须定义成抽象类。)
- 4.抽象类不能创建对象。(【最重要的特征】:得到了抽象方法,失去了创建对象的能力 (有得有失))
- 5.不能用abstract修饰变量、代码块、构造器。
- (抽象类,就像一个半成品的图纸,是一个不完整的设计图,为子类完成某些行为,而将这类行为定义成抽象方法,以供子类继承,并重写使用)
6.1.1 抽象的使用场景




6.1.2 注意事项:
- 抽象方法只有方法签名,不能声明方法体。
- 一个类中如果定义了抽象方法,这个类必须声明成抽象类,否则报错。




还有一种方式,利用快捷键:(直接写个run,一回车就可以了)
6.2 抽象类的案例














案例中,关于银卡的代码,自行补充哈
6.3 抽象类的特征、注意事项



一个类继承了抽象类必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。
抽象类,不能创建对象。
final和abstract是什么关系?
6.4 抽象类的应用知识:模板方法模式

【案例】理解模板方法:写作文案例
模板方法我们是建议使用final修饰的,这样会更专业,那么为什么呢?(加了final,可以防止被子类重写该方法)
7.接口
7.1 接口概述、特点


接口就是一种约定俗成的规范,约束对方只能按照一定的标准进行设计。
7.2 接口的基本使用:被实现

一个类实现了接口,必须重写全部接口的全部抽象方法,否则这个类也必须定义成抽象类。
7.3 接口与接口的关系:多继承





接口多继承的作用:规范合并,整合多个接口为同一个接口,便于子类实现。
上述继承接口如果太多了,就会写老长,很繁琐。
修改如下:
7.4 JDK8开始接口新增方法


第一种:默认方法(实例方法) (注意:接口的默认方法必须用default修饰,且需用接口的实现类的对象来调用。)
第二种:静态方法 (注意:接口的静态方法必须用本身的接口名来调用。)
第三种:私有方法(实例方法) (注意:接口的私有方法必须用private修饰,且只能在本类中被其他的默认方法或者私有方法访问。)
我们可以改下jdk的版本,看下







7.5 使用接口的注意事项

1、接口不能创建对象 (接口是更加彻底的抽象)
【接口无法直接创建对象,但是实现了接口的类可以创建对象,我们实现了某一个接口,就相当于创建了这个接口的一个子类,接口就是这个类的父类】
2、一个类实现多个接口,多个接口中有同样的静态方法不冲突。
3、一个类继承了父类,同时又实现了接口,父类中和接口有同名方法,默认用父类的。(因为父类离他更近,从伦理学上,现有亲爸再有干爹)
(因为父类离他更近,从伦理学上,现有亲爸再有干爹,所以类都是先继承,再实现)
4、 一个类实现了多个接口,多个接口中存在同名的默认方法,不冲突,这个类重写该方法即可。
5、一个接口继承多个接口,是没有问题的,如果多个接口中存在规范冲突则不能多继承。
8.总结:(总结.avi)
接口和抽象类都不能创建对象。
本文来自博客园,作者:子沐呐吖,转载请注明原文链接:https://www.cnblogs.com/SuperLee017/p/18137441








































































































浙公网安备 33010602011771号