Java学习14
上午3h接口完整语法 代码实战1. 接口基本概念与定义0.6h核心详细解释关键字interface接口不是类是一套「行为规范 / 能力契约」设计思想抽象类描述事物共性是什么接口描述额外能力能做什么核心限制接口不能 new 实例化只能被类实现无法存在构造方法、成员变量不能自定义天然具备权限修饰默认值简化开发接口默认隐藏规则面试必背成员变量默认自带public static final→ 全局常量不能修改抽象方法默认自带public abstract→ 强制实现类重写完整基础代码示例java运行// 定义接口动物行为规范 public interface Animal { // 全局常量等价 public static final int MAX_AGE 100; int MAX_AGE 100; // 抽象方法等价 public abstract void run(); void run(); void eat(String food); }逐行解析interface Animal声明这是一个接口区别于class类int MAX_AGE 100;隐藏修饰public static final静态全局共享final值固定不可修改无方法体方法接口抽象方法强制实现类必须重写2. 类实现接口 implements0.8h核心详细解释关键字implements实现区别于继承extendsJava 单继承限制一个类只能继承一个父类但可以实现多个接口接口多实现完美弥补 Java 单继承短板强制规则普通实现类必须重写接口所有抽象方法抽象实现类可以不重写交由子类完成多实现完整代码案例java运行// 第一个接口动物基础行为 interface Animal{ void run(); void eat(String food); } // 第二个接口奔跑能力 interface Runnable{ void fastRun(); } // 普通类 同时实现 多个接口 public class Dog implements Animal, Runnable{ // 重写Animal接口抽象方法 Override public void run() { System.out.println(小狗慢慢散步); } Override public void eat(String food) { System.out.println(小狗吃 food); } // 重写Runnable接口抽象方法 Override public void fastRun() { System.out.println(小狗快速奔跑); } // 子类独有方法 public void guardHome(){ System.out.println(小狗看家护院); } }拓展练习自定义 Study 接口java运行// 学习能力接口 public interface Study{ void studyJava(); } // 学生类继承实现 class Student implements Study{ Override public void studyJava() { System.out.println(学生每日学习Java面向对象); } }关键总结继承extends一对一实现implements一对多接口定义能力类按需实现能力3. 接口的多态1h核心详细解释接口完全支持多态接口引用 new 实现类对象口诀复用编译看左边接口运行看右边实现类权限限制编译阶段只能调用接口中定义的方法无法直接调用实现类独有方法必须向下转型 instanceof安全判断企业核心用法接口数组批量管理所有实现类解耦代码完整代码接口多态 接口数组java运行public class TestInterfacePoly { public static void main(String[] args) { // 1. 接口多态父类(接口)引用 指向 实现类对象 Animal animal new Dog(); animal.eat(狗粮); animal.run(); // 错误写法编译看左边接口无此方法 // animal.guardHome(); // 2. 向下转型调用子类独有方法 if(animal instanceof Dog){ Dog dog (Dog) animal; dog.guardHome(); dog.fastRun(); } // 3. 企业高频接口数组 统一管理 Animal[] animals { new Dog(), // 后续可无限新增实现类无需修改原有代码开闭原则 new Cat() }; // 增强for循环批量调用 for (Animal an : animals){ an.run(); } } } // 扩展实现类 class Cat implements Animal{ Override public void run() { System.out.println(猫咪悠闲走路); } Override public void eat(String food) { System.out.println(猫咪吃 food); } }运行逻辑拆解Animal animal new Dog()向上转型接口接收实现类对象animal.eat()编译看接口有方法运行执行 Dog 重写逻辑接口数组统一规范新增子类无需修改循环代码扩展性极强4. JDK8 接口新特性面试高频0.6h核心详细解释JDK8 新增default默认方法、static静态方法JDK9 新增private私有方法解决痛点旧接口新增抽象方法所有实现类全部报错默认方法新增方法无需强制重写兼容旧代码完整代码案例java运行public interface USB { // 1. 抽象方法必须重写 void work(); // 2. JDK8 default 默认方法有方法体可直接使用/可重写 default void connect(){ System.out.println(USB设备默认连接成功); commonMethod(); } // 3. JDK8 static 静态方法属于接口本身接口名直接调用 static void showInfo(){ System.out.println(这是标准USB3.0接口); } // 4. JDK9 private 私有方法抽取重复代码仅接口内部使用 private void commonMethod(){ System.out.println(设备通用初始化逻辑); } } // 实现类 class Mouse implements USB{ Override public void work() { System.out.println(鼠标正常工作); } // 可选重写default方法 Override public void connect() { System.out.println(鼠标专属连接逻辑); } } // 测试类 class TestUSB{ public static void main(String[] args) { USB mouse new Mouse(); mouse.connect(); // 调用重写后的默认方法 mouse.work(); // 静态方法接口名.方法名 USB.showInfo(); } }特性总结default实例调用实现类可选重写static接口名调用不能被实现类继承private私有化复用保护内部代码下午2.5h接口与抽象类深度对比 综合场景题1. 接口 VS 抽象类表格 深度解析 面试原题1h全方位对比表表格对比项抽象类 abstract class接口 interface继承关系extends单继承implements多实现成员变量私有 / 默认 /protected/public 任意可自定义默认public static final常量不可修改构造方法有构造方法用于子类初始化无构造方法不能实例化方法类型抽象方法 普通成员方法抽象方法 default static private关键字abstractinterface / implements设计思想is-a 「是什么」描述事物共性模板can-do 「能做什么」描述额外能力this/super支持不支持使用场景抽取子类通用属性、通用行为统一功能规范扩展额外能力深度理解区分抽象类学生、老师、医生 → 都是人共性抽取接口会开车、会做饭、会运动 → 额外附加能力2. 综合场景设计题1.5h场景一需求抽象父类Person抽取姓名、年龄、通用睡觉方法自定义接口Driver开车、Cook做饭子类Student、Teacher按需选择性实现接口完整全套代码java运行// 抽象父类人 共性模板 abstract class Person{ String name; int age; public Person(String name, int age) { this.name name; this.age age; } // 抽象方法 public abstract void work(); // 通用普通方法 public void sleep(){ System.out.println(name 正常休息睡觉); } } // 接口1开车能力 interface Driver{ void driveCar(); } // 接口2做饭能力 interface Cook{ void cookFood(); } // 学生类只实现开车接口 class Student extends Person implements Driver{ public Student(String name, int age) { super(name, age); } Override public void work() { System.out.println(name 日常学习); } Override public void driveCar() { System.out.println(name 会开私家车); } } // 老师类同时实现开车做饭 class Teacher extends Person implements Driver,Cook{ public Teacher(String name, int age) { super(name, age); } Override public void work() { System.out.println(name 上课教书); } Override public void driveCar() { System.out.println(name 会开轿车); } Override public void cookFood() { System.out.println(name 会做家常菜); } } // 测试类 class TestPersonDemo{ public static void main(String[] args) { Person p1 new Student(小明,20); p1.work(); p1.sleep(); // 向下转型调用接口独有能力 if(p1 instanceof Student){ Student s (Student) p1; s.driveCar(); } Person p2 new Teacher(李老师,35); p2.work(); } }设计逻辑解释共性所有人都有姓名、年龄、睡觉 → 抽入抽象类个性开车、做饭不是人人都会 → 做成接口按需实现符合开发规范共性用抽象类扩展能力用接口场景二需求抽象类Fruit水果通用模板接口Squeezable可榨汁能力实现类Apple、Orange、Watermelon核心设计逻辑水果都有名称、甜度 → 抽象类统一封装只有部分水果可榨汁 → 接口定义专属能力晚上1.5h拔高总结 今日验收1. 接口核心总结0.4h接口是行为规范约束实现类必须具备指定能力多实现解决 Java 单继承局限项目中大量用于功能解耦接口多态 接口数组企业级批量处理核心写法JDK8 新特性default 兼容升级static 工具方法复用开发原则优先用接口做功能扩展固定共性用抽象类2. 今日必做练习题完整代码需求接口 Jumpvoid jump()抽象类 Animalname/age 普通方法 sleep ()Cat、Sheep 继承 Animal 并实现 Jumpjava运行// 能力接口 interface Jump{ void jump(); } // 抽象父类 abstract class Animal{ String name; int age; public Animal(String name, int age) { this.name name; this.age age; } public void sleep(){ System.out.println(name 原地睡觉); } } // 子类猫 class Cat extends Animal implements Jump{ public Cat(String name, int age) { super(name, age); } Override public void jump() { System.out.println(name 轻盈跳跃); } } // 子类羊 class Sheep extends Animal implements Jump{ public Sheep(String name, int age) { super(name, age); } Override public void jump() { System.out.println(name 原地蹦跳); } } // 测试 class TestFinal{ public static void main(String[] args) { Animal a new Cat(橘猫,3); a.sleep(); // 接口向下转型 if(a instanceof Jump){ Jump j (Jump) a; j.jump(); } } }3. 口述必背 5 点验收标准抽象类单继承接口多实现抽象类有构造接口无构造抽象类存共性接口定能力抽象类可自定义变量接口只有常量抽象类用 extends接口用 implementsDay14 通关硬标准严格达标✅ 独立手写接口、抽象方法、全局常量✅ 熟练使用 implements 多实现、重写方法✅ 掌握接口多态、接口数组遍历✅ 无混淆 extends /implements✅ 能根据业务场景区分抽象类 / 接口选用表格类型关键字有没有 class能不能 new普通类实体类class✅ 有✅ 能抽象类abstract class✅ 有❌ 不能接口interface❌ 没有❌ 不能Java 方法一共分 5 大类普通成员方法抽象方法静态方法 static默认方法 defaultJDK8 接口私有方法 privateJDK9 接口核心超级对比必背・面试必考表格方法类型有无方法体归属能否重写书写位置普通方法✅ 有对象✅ 可以普通类 / 抽象类抽象方法❌ 无规范约束✅ 必须重写抽象类 / 接口static 静态✅ 有类❌ 不能类 / 接口default 默认✅ 有接口实现类⚙️ 可选重写仅接口private 私有✅ 有接口内部❌ 不能仅接口结合你学过的内容 通俗大白话普通方法日常干活的方法new 对象就能调多态重写全靠它。抽象方法只定规矩、不干活逼着子类必须自己写实现。静态方法全局共享不用 new 对象和对象没关系不参与多态。default 方法接口专属补丁老项目升级不崩溃想重写就重写、不想写直接用。接口 private 方法接口自己偷偷用外面完全看不见只用来复用代码。最简背诵口诀普通方法有体、归对象、可重写抽象方法无体、定规范、必重写静态方法类调用、无多态、不重写默认方法接口用、有方法、选着重接口私有内部用、藏起来、不能调接口常量 → 自动补public static final→ 直接简写接口抽象方法 → 自动补public abstract→ 直接简写default /static/private 接口方法 →不能省必须手写抽象类抽象方法 →不能省 abstract什么情况下可以不写public接口抽象方法、常量全都能省略 public系统自动补同包内普通类、普通方法、成员变量可省略 public抽象类抽象方法不能省略 public、abstract要给外面 / 跨包用必须加 public不能省一句话绝杀区分写在interface 里→ 随便省 public写在class /abstract class 里→ 想省只能同包用跨包必须写 public总结接口可以没有抽象方法接口抽象方法默认自带public abstract可简写。方法体 大括号{} 内部代码分号结尾无大括号 无方法体 抽象方法。方法定义要写返回值类型方法调用只写方法名不用类型。JDK8 之后新增 default/staticJDK9 加 private高版本全部兼容。