JAVA进阶--语法知识:包、权限修饰符、final、常量、枚举--2022年8月30日
第一节 包
1、导包
相同包下的类可以直接访问,不同包下的类必须导包,才可以使用!导包格式:import 包名.类名
加入一个类中需要用到不同类,而这两个类的名称是一样的,那么默认只能导入一个类,另一个类要带包名访问
第二节 权限修饰符
1、权限修饰符是什么?
有四种作用范围由小到大(private->缺省->protected->public)
注意:protected不同包下的子类可以访问的意思是父类有一个project方法,子类继承父类,子类里面用子类对象访问父类的project方法,直接在子类里面用父类对象访问父类的project方法也是不行的。
第三节 final
1、final的语法
第四节 常量
1、常量 public static final
一般常量可以做信息标志和分类
第五节 枚举
1、枚举
===
枚举适合做信息标志和分类,常量适合存值!!具体应用要看具体的应用场景
第六节 抽象类
1、抽象类、抽象方法是什么样的
都是用abstract修饰的;抽象方法只有方法签名,不能写方法体
一个类中定义了抽象方法,这个类必须申明成抽象类
2、抽象类的基本作用是啥
作为父类,用来被继承的
3、继承抽象类有哪些要注意
一个类如果继承了抽象类,那么这个类必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类
4、抽象类的特征和注意事项
类有的东西,抽象类都有
抽象类中可以没有抽象方法,但是有抽象方法的一定是抽象类
一个类继承了抽象类,一定要重写抽象类里的所有抽象方法,否则这个类必须要定义成抽象类
抽象类不能创建对象(此观点不能动摇),为什么?
反证法:如果抽象类可以创建对象,那抽象类里的抽象方法根本都跑不了,连方法体都没有
5、final和abstract是什么关系
互斥关系
abstract定义的抽象类作为模板让子类继承,final定义的类不能被继承
抽象方法定义通用功能让子类重写,final定义的方法子类不能重写
6、抽象类和抽象方法实现模板方法模式
使用场景:当系统中出现同一个功能多处在开发,而该功能中大部分代码是一样的,只有其中部分可能不同的时候
模板方法模式实现步骤:
把功能定义成一个所谓的模板方法,放在抽象类中,模板方法中只定义通用且能确定的代码
模板方法中不能决定的功能定义成抽象方法让具体子类去实现
7、模板方法模式解决了什么问题
提高了代码的复用性
模板方法已经定义了通用结构,模板方法不能确定的部分定义成抽象方法,交给子类实现,因此,使用者只需要关心自己需要实现的功能即可
8、模板方法模式里面的方法最好加final修饰,这样会更专业,是为什么呢?
模板方法是给子类直接使用的,不是让子类重写的,一旦子类重写了模板方法,则模板方法就失效了,因此,加上final后可以防止子类重写模板方法,这样更安全专业。
package com.maofugui.d1_package.d2_package; public abstract class Student { // 模板方法模式 public final void write(){ System.out.println("我的爸爸"); System.out.println("一样的第一段"); //正文部分(每个子类都要写的,每个子类写的情况不一样 //因此,模板方法把正文部分定义成抽象方法,交给具体的子类去完成 System.out.println(writeMain()); System.out.println("一样的结尾"); } public abstract String writeMain(); }
package com.maofugui.d1_package.d2_package; public class StudentZhong extends Student{ @Override public String writeMain() { return "中学生的正文"; } }
package com.maofugui.d1_package.d2_package; public class StudentXiao extends Student{ @Override public String writeMain() { return "小学生的正文"; } }
package com.maofugui.d1_package.d2_package; public class Test { public static void main(String[] args){ StudentXiao studentXiao = new StudentXiao(); studentXiao.write(); StudentZhong studentZhong = new StudentZhong(); studentZhong.write(); } }
第七节 接口
1、接口是什么
public implements 接口名{}
接口是一种规范,规范一定是公开的
JDK8前,接口中只能有抽象方法和常量
常量:由于接口体现规范思想,规范默认都是公开的,所以代码层面public static final可以省略不写
抽象方法:由于接口体现规范思想,规范默认都是公开的,所以代码层面public abstract可以省略不写
2、接口的用法
public class 类名 implements 接口名,接口名......
接口是用来被类实现的,实现接口的类称为实现类。实现类可以理解为所谓的子类。
接口可以被类单实现,也可以被类多实现
注意:一个类实现接口,必须重写完全部接口的全部抽象方法,否则这个类需要定义成抽象类
3、基本小结
类和类的关系:单继承
类和接口的关系:多实现
接口和接口的关系:多继承,一个接口可以同时继承多个接口
4、接口多继承的作用
规范合并,整合多个接口为同一个接口,便于子类实现
5、JDK开始后新增了哪些方法?
默认方法:default修饰,实现类对象调用
静态方法:static修饰,必须用当前接口名调用
私有方法:private修饰,jdk9开始才有的,只能在接口内部被调用
他们都会默认被public修饰
注意:jdk8新增的3种方法我们自己在开发中很少使用,通常是java源码涉及到。现阶段需要理解、识别语法。,明白调用关系即可。
6、接口的注意事项
接口不能创建对象
一个类实现多个接口,多个接口中有同样的静态方法不冲突,因为接口中的静态方法要用接口名.静态方法调用
一个类继承了父类,同时又实现了接口,父类中和接口有同名的方法,默认用父类的
一个类实现了多个接口,多个接口中存在同名的默认方法,不冲突,这个类重写该方法即可
一个接口继承多个接口,是没有问题的,如果多个接口中存在规范冲突则不能多继承,比如被继承的两个接口有名字,形参列表都一样的函数,但返回值不一样,那就会报错
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理