抽象类、设计模式(模板模式和单例模式)、final关键词、接口(interface)
一、抽象类 1.概念 有abstract修饰的类,称之为抽象类,抽象类中包含抽象方法的.
2.abstract关键词
1)修饰类 - 抽象类
特点:
a.抽象类不能实例化,也就是不能new对象,只能new非抽象的子类.
b.如果一个类包含抽象方法,那么这个类一定是抽象类.
c.子类继承抽象父类,必须实现父类中所有的抽象方法,否者将子类变抽象类.
2)修饰方法 - 抽象方法
a.格式:
访问修饰符 abstract 返回值类型 方法名();
ps: public abstract void m1();
b.特点:抽象方法没有方法体
3)修饰变量 - 不能修饰变量
二、设计模式 1.概念 软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 2.模板模式 特点: 模板模式的优势是,模板已经定义好了通用架构,使用者只需要关心自己需要实现的功能即可. 案例: 新司机: 开车:开门,点火,关门,[双手握住方向盘],熄火,停车 老司机: 开车:开门,点火,关门,[不用手握方向盘],熄火,停车 3.单例模式 1)概念 单例模式是一种常用的设计模式,通过单例模式可以保证整个系统中,一个类只存在一个实例对象. 2)单例模式类型 a.饿汉模式 在没有适用对象之前,就已经创建好对象 b.懒汉模式 在需要使用对象时,在进行创建 3)实现步骤: a.将构造方法私有化,让它不能在类的外部使用new关键词创建对象 private static final 对象类 实例名 = new 对象类(); //饿汉模式 private static 对象类 实例名; //懒汉模式 b.在该类内部产生一个唯一的实例化对象,并且封装为private static类型的成员变量 private 对象类(){ } c.定义一个静态方法返回唯一对象 public static 对象类 getIntance(){ return 实例名; } //饿汉模式 public static 对象类 getIntance(){ return new 对象类; } //懒人模式 d.创建单例对象 对象类 实例名 =对象类.getIntance(); 实例名.成员变量 = 数据类型;
三、final关键词: 最终的,最后的 1.修饰类: 不可被继承 2.修饰成员变量: 不可变改变 注意: 成员变量定义时,不一定需要进行初始化操作,因为有默认初始化 final修饰的成员变量,一定要进行初始化操作 初始化位置有哪些? 1.声明的同时初始化 final int age = 10; 2.构造方法 final int a; public Demo02Variable() { a = 10; } public Demo02Variable(int a) { this.a = a; } } 3.代码块 final int b; { b = 20; } 3.修饰成员方法: 不可被重写 4.修饰局部变量: 基本类型: 值不可改变 引用类型: 地址值不可改变
四、接口(interface) 1.概念 接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。 2.格式定义 访问修饰符 interface 接口名称{} 静态常量:全大写多个单词用_连接,如: public final static int MAX_VALUE =1000; 抽象方法: public abstract void m1(); // 完整写法 abstract void m2(); public void m3(); void m4(); 实现类: 访问修饰符 class 实现类名(接口名Impl) implements 接口名{} public void m1() {修改的方法} public void m2() {修改的方法} public void m3() {修改的方法} public void m4() {修改的方法} 注意事项: a.不能new接口,只能new接口的实现类 接口名 实例名 = new 实现类名(); 实例名.方法名; b.实现接口就必须实现接口中所有的抽象方法 (m1,m2,m3,m4相互对应) 3.接口的使用 1)JDK1.7版本 公开的静态常量 公开的抽象方法 2)JDK1.8版本 默认方法: a.default修饰词必须添加,用于表示默认方法,不是表示访问修饰符 b.public修饰词是可以省略不写 可以选择进行方法重写 静态方法 a.public修饰词是可以省略不写 b.属于接口的,通过接口直接调用. 调用方式: 接口名.方法名 不可以进行方法重写 3)JDK1.9版本 私有方法(静态私有/普通私有) 静态私有: 提取静态方法中共有部分内容 普通私有: 提取默认方法中共有部分内容
4.类和接口 类和类: 1 v 1 单继承 类和接口: 1 v n 多实现 接口和接口: 1 v n 多继承 接口和类: 没有 5.接口作为方法参数 / 返回值使用 作为方法参数:可以传所有实现类对象,所以具体使用的都是接口的实现类对象 作为返回值使用:可以返回所有实现类对象,所以具体使用的都是接口的实现类对象
访问权限默认值
关于抽象类
JDK 1.8以前,抽象类的方法默认访问权限为protected
JDK 1.8时,抽象类的方法默认访问权限变为default
关于接口
JDK 1.8以前,接口中的方法必须是public的
JDK 1.8时,接口中的方法可以是public的,也可以是default的
JDK 1.9时,接口中的方法可以是private的
面试题: (重要) 1.接口和抽象类的区别 a.解释什么是接口和抽象类 b.从语法上/使用方式上分析两个的区别 c.使用场景