目录
2. 面向对象高级
2.1 接口新特性
2.1.1 接口新特性
- JDK8的新特性:接口中可以定义有方法体的方法。(默认、静态)
- JDK9的新特性:接口中可以定义私有方法。
2.1.2 JDK8 接口特性
public class InterfaceTest {
public static void main(String[] args) {
AInterImpl a = new AInterImpl();
a.method();
A.function();
}
}
interface A {
default void method(){
System.out.println("A...method");
}
static void function(){
System.out.println("A...static...function");
}
}
interface Inter {
void show();
void print();
default void method(){
System.out.println("Inter...method");
}
}
class AInterImpl extends Object implements Inter , A {
@Override
public void show() {
System.out.println("AInterImpl...show");
}
@Override
public void print() {
System.out.println("AInterImpl...print");
}
@Override
public void method() {
A.super.method();
Inter.super.method();
}
}
class BInterImpl implements Inter {
@Override
public void show() {
System.out.println("BInterImpl...show");
}
@Override
public void print() {
System.out.println("BInterImpl...print");
}
}
2.1.3 JDK9 接口特性
将方法public default void log() 改为 private void log() 进而阻止其"暴露"给子类的直接调用
public class InterfaceTest {
/*
JDK9接口特性 :
接口中允许定义私有方法
*/
public static void main(String[] args) {
}
}
interface Inter {
void show();
void print();
public static void start(){
System.out.println("start方法执行...");
log();
}
public static void end(){
System.out.println("end方法执行...");
log();
}
private static void log(){
System.out.println("日志记录");
}
}
2.2 代码块
2.2.1 代码块的介绍
在Java类下,使用 { } 括起来的代码被称为代码块
分类:
- 局部代码块
- 构造代码块
- 静态代码块
- 同步代码块
2.3 内部类
2.3.1 内部类的介绍
内部类就是定义在一个类里面的类
2.3.2 内部类成员访问
- 内部类中, 访问外部类成员 : 直接访问, 包括私有
- 外部类中, 访问内部类成员 : 需要创建对象访问
2.3.3 内部类-面试题
2.3.4 内部类的分类
- 成员内部类
- 静态内部类
- 局部内部类
- 匿名内部类
局部内部类 (鸡肋语法,了解即可)
局部内部类放在方法、代码块、构造器等执行体中。
2.4 Lambda 表达式
2.4.1 Lambda 概述
2.4.2 Lambda表达式的省略写法
- 参数类型可以省略不写。
- 如果只有一个参数,参数类型可以省略,同时 () 也可以省略。
- 如果Lambda表达式的方法体代码只有一行代码
♦ 可以省略大括号不写,同时要省略分号
♦ 此时,如果这行代码是return语句,必须省略return不写,同时也必须省略 ";" 不写
2.4.3 Lambda表达式和匿名内部类的区别
2.5 窗体、组件、事件
2.5.1 窗体对象 JFrame
public class Test {
public static void main(String[] args) {
// 创建窗体对象
JFrame frame = new JFrame();
// 设置宽和高
frame.setSize(514, 595);
// 设置关闭模式
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// 设置窗体标题
frame.setTitle("窗体");
// 设置窗体可见
frame.setVisible(true);
}
}
2.5.2 组件
按钮组件
使用窗体对象调用面板对象并添加对应的组件
frame.getContentPane() 返回面板对象
使用Jframe类时 需取消默认布局
2.5.3 总结
JLabel 组件
- JLabel(String text) 使用指定的文本创建一个 JLabel 对象
- JLabel(Icon image) 创建一个具有指定图像的 JLabel 对象。
注意:如果多个组件摆放在同一个位置,后添加的组件,会被压在底部。
2.5.4 事件
事件是可以被组件识别的操作
当你对组件干了某件操作之后,就会执行对应的代码
ActionListener: 对鼠标、空格的监听
KeyListener 对键盘的监听
2.6 常见的两个设计模式
2.6.1 适配器设计模式
♦ 适配器
设计模式
:
解决接口与接口实现类之间的矛盾问题
♦ 实现步骤
- 编写一个 xxxAdapter 类, 实现对应接口
- 重写内部所有抽象方法, 但方法都是空实现
- 让自己的类去继承适配器类, 重写自己需要的方法即可
- 为了避免其他类创建适配器类的对象, 使用 abstract 进行修饰
2.6.2 模板设计模式
- 模板设计模式:把抽象类整体就可以看做成一个模板,模板中不能决定的东西定义成抽象方法
让使用模板的类(继承抽象类的类)去重写抽象方法实现需求
♦ 小结:模板设计模式的优势,模板已经定义了通用结构,使用者只需要关心自己需要实现的功能即可