第07章:随堂复习与企业真题(面向对象-进阶)
一、随堂复习
1. this关键字的使用
-
this调用的结构:属性、方法;构造器
-
this调用属性或方法时,理解为:当前对象或当前正在创建的对象。
public void setName(String name){ //当属性名和形参名同名时,必须使用this来区分 this.name = name; } public Person(String name){ this.name = name; }
-
this(形参列表)的方式,表示调用当前类中其他的重载的构造器。
2. 面向对象的特征二:继承性
- 继承性的好处
- 减少了代码的冗余,提高了复用性;
- 提高了扩展性
- 为多态的使用,提供了前提。
- Java中继承性的特点
- 局限性:类的单继承性。后续我们通过类实现接口的方式,解决单继承的局限性。
- 支持多层继承,一个父类可以声明多个子类。
- 基础:class A extends B{}
- 理解:子类就获取了父类中声明的全部的属性、方法。可能受封装性的影响,不能直接调用。
3. 方法的重写(override / overwrite)
- 面试题:方法的重载与重写的区别?
- 方法的重载:“两同一不同”
- 方法的重写:
- 前提:类的继承关系
- 子类对父类中同名同参数方法的覆盖、覆写。
4. super关键字的使用
- super可以调用的结构:属性、方法;构造器
- super:父类的
- super调用父类的属性、方法:
- 如果子父类中出现了同名的属性,此时使用super.的方式,表明调用的是父类中声明的属性。
- 子类重写了父类的方法。如果子类的任何一个方法中需要调用父类被重写的方法时,需要使用super.
- super调用构造器:
- 在子类的构造器中,首行要么使用了"this(形参列表)“,要么使用了"super(形参列表)”。
5. (熟悉)子类对象实例化的全过程
- 结果上来说:体现为继承性
- 过程上来说:子类调用构造器创建对象时,一定会直接或间接的调用其父类的构造器,以及父类的父类的构造器,…,直到调用到Object()的构造器。
6. 面向对象的特征三:多态性
-
广义上的理解:子类对象的多态性、方法的重写;方法的重载
狭义上的理解:子类对象的多态性。
-
格式:Object obj = new String(“hello”); 父类的引用指向子类的对象。
-
多态的好处:减少了大量的重载的方法的定义;开闭原则
- 举例:public boolean equals(Object obj)
- 多态,无处不在!讲了抽象类、接口以后,会有更好的理解。
-
多态的使用:虚拟方法调用。“编译看左边,运行看右边”。属性,不存在多态性。
-
多态的逆过程:向下转型,使用强转符()。
- 为了避免出现强转时的ClassCastException,建议()之前使用instanceOf进行判断。
7. Object类的使用
- 根父类
- equals()的使用
- 重写和不重写的区别
- 面试题: == 和 equals()
- toString()的使用
- Object中toString()调用后,返回当前对象所属的类和地址值。
- 开发中常常重写toString(),用于返回当前对象的属性信息。
8. 项目二:拼电商客户管理系统
- 编写两个类:Customer 、 CustomerList类(封装了对数组的增删改查操作)
第08章:随堂复习与企业真题(面向对象-高级)
一、随堂复习
1. 关键字:static
-
static:静态的,随着类的加载而加载、执行。
-
static用来修饰:属性、方法、代码块、内部类
-
熟悉:static修饰的类变量、类方法与不使用static修饰的区别。
- 类变量:类的生命周期内,只有一个。被类的多个实例共享。
-
掌握:我们遇到属性或方法时,需要考虑是否声明为static的。
2. 单例模式(或单子模式)
- 经典的设计模式有23种
- 解决的问题:在整个软件系统中,只存在当前类的唯一实例。
- 实现方式:饿汉式、懒汉式、枚举类等
- 对比饿汉式和懒汉式
- 饿汉式:“立即加载”,线程安全的。
- 懒汉式:“延迟加载”,线程不安全。
- 需要会手写饿汉式和懒汉式
3. 理解main()方法
- public static void main(String[] args){}
- 理解1:作为程序的入口;普通的静态方法
- 理解2:如何使用main()与控制台进行数据的交互。
- 命令行:java 类名 “Tom” “Jerry” “123”
4. 类的成员之四:代码块
- 分类:静态代码块、非静态代码块
- 使用频率上来讲:用的比较少。
- 静态代码块:随着类的加载而执行
- 非静态代码块:随着对象的创建而执行
总结:对象的实例变量可以赋值的位置及先后顺序
① 默认初始化
② 显式初始化 或 ⑤ 代码块中初始化
③ 构造器中初始化④ 有了对象以后,通过"对象.属性"或"对象.方法"的方法进行赋值
执行的先后顺序:
① - ②/⑤ - ③ - ④
5. 关键字:final
-
最终的
-
用来修饰:类、方法、变量(成员变量、局部变量)
- 类:不能被继承
- 方法:不能被重写
- 变量:是一个“常量”,一旦赋值不能修改。
6. 关键字:abstract
- 抽象的
- 用来修饰:类、方法
- 类:抽象类:不能实例化。
- 方法:抽象方法:没有方法体,必须由子类实现此方法。
7. 关键字:interface
-
interface:接口,用来定义一组规范、一种标准。
-
掌握:接口中可以声明的结构。
-
属性:使用public static final修饰
-
方法:jdk8之前:只能声明抽象方法,使用public abstract修饰
jdk8中:声明static方法、default方法。
jdk9中:声明private方法。
-
-
笔试题:抽象类、接口的对比。
8. 类的成员之五:内部类
> 成员内部类的理解
> 如何创建成员内部类的实例
> 如何在成员内部类中调用外部类的结构
> 局部内部类的基本使用(关注:如何在方法内创建匿名局部内部类的对象)
9. 枚举类:enum
- 掌握:使用enum关键字定义枚举类即可。
10. 注解:Annotation
- 框架 = 注解 + 反射 + 设计模式
- Java基础阶段:简单。@Override 、 @Deprecated、@SuppressWarnings
- 元注解:对现有的注解进行解释说明。
- @Target:表明可以用来修饰的结构
- @Retation:表明生命周期
- 如何自定义注解。
11. 包装类的使用
- 掌握:基本数据类型对应的包装类都有哪些?
- 掌握:基本数据类型、包装类、String三者之间的转换
- 基本数据类型 <-> 包装类:自动装箱、自动拆箱
- 基本数据类型、包装类 <-> String
- String的valueOf(xxx)
- 包装类的parseXxx(String str)