# 面向对象高级 | Eabor
Have a good day!
Author: EaborH
Keywords: Hexo Theme Redefine

## I'm on my way...

# 面向对象高级

EaborH
2025-03-17 18:11:51 2025-03-17 18:11:51 Created 2025-03-17 18:16:13 2025-03-17 18:16:13 Updated

- 面向对象

- final
- | 单例类
- | 枚举类
- | 抽象类
- | 接口

# Final关键字

### 认识final

final 关键字是最终的意思，可以修饰：类，方法，变量

- 修饰类：该类被称为最终类，特点是不能被继承了
- 修饰方法：该方法被成为最终方法，特点是不能被重写了
- 修饰变量：该变量有且只能被赋值一次

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40

    package life.eabor.finaldemo;

    public class FinalDemo1 {

        // final修饰静态成员变量
        // final修饰的成员变量，这个变量今后被成为常量，记录一个固定值，不能被修改，作为系统配置信息
        public static final String NAME = "eabor";

        public static void main(String[] args) {
            // 认识final关键字的作用
            // 3、final修饰的变量，不能被修改
            /*
                变量有哪些
                a、成员变量：
                    静态成员变量，实例成员变量
                b、局部变量
             */        final int NUMBER = 666;
            // NUMBER = 888;
        }
    }

    // 1、final修饰的类，不能被继承

    final class A{}
    //class B extends A{}

    // 2、final修饰的方法，不能被重写
    class C{
        public void m1(){
            System.out.println("m1");
        }
    }

    class D extends C{
        // @Override
        // void m1(){}
    }

final 修饰变量的注意

- final修饰的基本类型变量，变量储存的数据不能被改变
- final修饰的引用类型变量，变量存储的地址不能被改变，但是地址所指向对象的内容是可以被改变的

    1
    2
    3
    4
    5
    6
    7

    final int a = 20;
    // a = 30 !errow

    final int[] arr = {};
    // arr = new int[]{} !errow
    arr[index] = num;

### 常量

- 使用 static final 修饰的成员变量就被称为常量
- 作用：常用于记录系统的配置信息
- 常量命名规范：建议大写英文单词，多个单词使用下划线连接

    1
    2

    public class Constant
    	public static final USER_NAME = "Eabor";

使用常量记录系统配置信息的优势、执行原理

- 代码的可读性更好，可维护性更好
- 程序编译后，常量会被”宏替换“：出现常量的地方全部会被替换成其记住的字面量，这样可以保证使用常量和直接使用字面量的性能是一样的

# 单例类（设计模式）

### 什么是设计模式

- 一个问题通常有
  种解法，其中肯定有一种解法是最优的，这种最优的解法被总结出来了，称为设计模式
- 设计模式有
  多种，对应
  多种软件开发中会遇到的问题

### 单例设计模式

- 作用：确保某个类只能创建一个对象

写法，实现步骤

- 把类的构造器私有化
- 定义一个类变量记住类的一个对象
- 定义一个类方法，返回对象

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    // 单例类
    public class A {
    	// 2、定义一个类变量记住类的一个唯一对象
    	private static A a = new A();

    	// 1、私有构造器
    	private A(){
    	}

    	// 3、定义一个类方法返回对象
    	public static A getObject(){
    		return a;
    	}
    }

懒汉式单例类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    public class B {
    	// 2、定义一个类变量记住类的一个唯一对象
    	private static B b;

    	// 1、私有构造器
    	private b(){
    	}

    	// 3、定义一个类方法返回对象
    	public static B getObject(){
    		if(b == null){
    			b = new B();
    		}
    		return b;
    	}
    }

### 枚举类

枚举类式一种特殊类

枚举类的写法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    修饰符 enum 枚举类名{
    	名称1,名称2,...; // 只能是枚举对象的名称
    	其他成员...
    }

    public enum A{
    	X,Y,Z;
    }

    public class Text {
    	public static void main(String[] args) {
    		A a1 = new X;
    		A a2 = new Y;
    		System.out.println(a1.name()); // X
    		System.out.println(a2.name()); // Y
    		System.out.println(a1.ordinal); // 索引 0
    		System.out.println(a2.ordinal); // 索引 1
    	}
    }

### 枚举类的常见应用场景

- 枚举类很适合做信息分类和标志

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26

    public class Text {
    	public static void main(String[] args) {
    		move(Direction.Dowm);
    	}
    	public static void move(Direction direction){
    		switch(direction){
    			case UP :
    				...
    				break;
    			case DOWN :
    				...
    				break;
    			case LEFT :
    				...
    				break;
    			case ROGHT :
    				...
    				break;
    		}
    	}

    public enum Direction {
    	UP,DOWN,LEFT,RIGHT;
    }

- Title: 面向对象高级
- Author: EaborH
- Created at : 2025-03-17 18:11:51
- Updated at : 2025-03-17 18:16:13
- Link: https://eabor.xyz/2025/03/17/面向对象高级/
- License: This work is licensed under CC BY-NC-SA 4.0.

- #final
- #单例类
- #枚举类
- #抽象类
- #接口

面向对象 Next posts