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)

接口和抽象类都不能创建对象。









posted @ 2024-04-17 08:41  子沐呐吖  阅读(42)  评论(0)    收藏  举报