01 多态
01_01 认识多态
【1】什么是多态:多态是在继承或实现下的一种现象,表现为 对象多态 和 行为多态。
【2】现实生活中:
① 对象多态:一个人可以拥有多个身份
② 行为多态:不同的人完成某个事情的表现结果不同
【3】代码中如何体现对象多态:
People p1 = new Student();
People p2 = new Teacher();
【4】代码中如何体现行为多态:
p1.run();
p2.run();
【5】构成多态的前提:
① 存在继承/实现关系。
② 父类引用指向子类对象。
③ 存在方法的重写。
【6】注意:成员变量并不具有多态性。
01_02 多态的好处
① 在多态的形式下右边对象是解耦合的,更便于扩展和维护,即父类引用指向的子类对象可以随时切换,而后面的逻辑代码并不需要更改。
② 使用父类引用可以作为方法的形参或返回类型来接收一切子类对象。
01_03 多态下的类型转换问题
【问题引入】父类对象是无法调用子类独有的方法?如何解决:对父类引用进行强制类型转换,且在转换之前使用instanceof关键字判断父类引用指向的对象是什么类型的再进行转换。
02 final关键字
02_01 认识final
【1】final是最终的意思,可以用来修饰类,方法,变量。
【2】final修饰类:被final修饰的类不能被继承。可以给工具类用final修饰。
【3】final修饰方法:被final修饰的方法不能被重写。可以看一下模板方法设计模式。
【4】final修饰的变量(成员变量,局部变量):被final修饰的变量,变量只能被赋值一次。
注意:① final修饰基本类型的变量,变量存储的数据不能被改变。
② final修饰引用类型的变量,变量存储的地址不能被改变,但地址所指向的对象内容可以发生改变。
③ 技巧:我们可以把方法入参的类型用final修饰,这样可以保证入参的值不能被更改。
说明:① final修饰的类变量又称常量,常量名的命名格式为,单词全大写,单词之间用下划线连接。
② final修饰的实例变量很少用,因为实例变量数据对象,每个对象都有一份,而此时你又将该变量用final修饰此时该变量中存储的值并不能改变,那还不如干脆定义成常量呢。
02_02 常量详解
【1】语法:修饰符 + static final
常量名:单词全大写,单词之间用下划线连接
【2】应用场景:常用于记录系统的配置信息。
【3】使用常量的优点:可读性好,可维护性强。可读性好是因为我们要去使用这些信息时直接用常量名就可以,而常量名通常以见名知意的约定创建,例如CLASSROOM我们一下就能明白这个常量值代表什么。可维护性好是因为当我们想修改某个常量值时直接修改即可,此时代码中使用常量值的地方,常量值的内容会自动发生变化,而不需要我们一个个手动修改。
【4】执行原理:程序编译后,常量会被宏替换:出现常量的地方全部会被替换成其记住的字面量,这样可以保证使用常量和直接使用字面量的性能是一样的。(也是优点之一)
03 抽象类
03_01 认识抽象类
【1】概念:Java提供了一个关键字abstract,它是抽象的意思,可以用它来修饰类、成员方法。
① 被abstract修饰的类叫做抽象类。
② 被abstract修饰的方法叫做抽象方法,抽象方法只有方法签名,不能有方法体。
【2】注意事项:
① 抽象类中不一定有抽象方法,但有抽象方法的类一定要是抽象类。
② 抽象类中普通类有的5大金刚,它都可以有。
③ 抽象类只能被继承,不能实例化对象(它有公开的构造器和它能不能创建对象,在抽象方法的概念里是没有因果关系的)
④ 一个类继承了抽象类,它就必须重写抽象类中的所有抽象方法,否则这个类也必须是抽象类。
03_02 使用抽象类的好处
03_03 应用:模板方法设计模式
【1】模板方法解决了什么问题:用于解决方法中存在重复代码的问题。
【2】怎样写模板方法设计模式:① 在父类中定义一个由final修饰的模板方法,里面存放重复代码的内容
② 在父类中定义一个抽象方法,模板方法中非重复代码的部分调用该抽象方法
③ 在子类中只需要重写父类中的抽象方法即可,模板方法不用重写,这也是为什么模板方法由final修饰的原因(被static,private,final修饰的方法不能被重写)
04 接口
04_01 接口概述
【1】概念:Java提供了一个关键字interface,使用这个关键字可以定义出一个特殊的结构:接口
【2】接口中的内容只能有两部分:
① 成员变量,默认定义成常量。
② 成员方法,默认定义成抽象方法。
【3】特点:
① 接口是不能实例化对象的。
② 类可以通过implements关键字来实现多个接口,实现接口的类又被称为实现类。
③ 实现多个接口的实现类必须重写所有接口中的抽象方法,否则它自己必须定义成抽象类。
④ 接口中的成员很多都是用public修饰的,是因为接口中的东西本身就是供别人使用的,当然要公开出来咯。
04_02 接口的好处
【1】好处:
① 弥补了单继承的不足,一个类可以同时实现多个接口,从而扩展子类更多的特征和能力。
提问:为什么我们要让类去实现接口从而去扩展可类的特征和能力,而不是直接把代码写在类中?答:通过接口去扩展特征和能力,当别人看到了implements后面的内容其实就可以显性地知道了这个类有哪些能力,而直接把代码写在类中反而不直观,也不方便代码的复用。
② 程序可以面向接口编程,这样可以更方便地切换各种业务实现,和多态好处的解耦合性一致。
04_03 接口的综合案例
提示:学生类,学生操作类,接口,操作类1,操作类2;在学生操作类的操作方法中使用接口引用调用操作类1/2的相关方法。
04_04 其他:JDK8开始,接口中新增的三中方法
【为什么要新增这三个方法】:① 增强了接口的能力 ② 如果说有一天我们需要给接口新增一个方法,那么所有实现这个接口的子类都得重写该方法,假如有100个子类,显然效率不高,在JDK8之后引入新增的三个方法,我们此时就可以直接在接口中把需要新增的方法写成default/private/static方法,这样子类们就可以不用都去实现一遍了。
04_05 其他:接口的多继承、使用接口的注意事项(了解)