
# 移动内部类到上一级
此重构支持将内部类移至上层，这个重构将包外的类、函数、变量、常量和命名空间移动到一个包中。
#### 执行重构
1. 在代码编辑器中，将光标放在要移动到上层的内部类（非静态内部类）的声明位置。
2. 单击右键展示上下文菜单，选择**"重构 \> 将内部类移动到上一级..."** **。**
3. 在打开的**"将内部类移动到上一级"** 对话框中，提供移动类的名称和其他重构选项。
   
   - 要保留移动类对其以前的外部类的访问权限，请勾选复选框**"将外部类的实例作为参数传递"**。
   
   - 要在搜索代码中移动类的引用，请勾选**"在注释和字符串中搜索"** 和**"搜索文本出现次数"** 复选框 。
     如下图所示：
     图1将内部类移动到上一级   
     ![](https://support.huaweicloud.com/usermanual-codeartside/zh-cn_image_0000002384725469.png) 
   
   
   
   
4. 单击**"重构"**以应用重构。
 
#### 示例
例如，将InnerClass移动到上层。要保留从InnerClass到OuterClass的访问，OuterClass的实例将作为参数传递给InnerClass。
**重构前**
"com\\refactoring\\source\\OuterClass.java" 文件内容如下：
```
class OuterClass {
    String str = "test";
    public void outermethod(){
        InnerClass ic = new InnerClass();
        ic.print();
    }
    class InnerClass {
        public void print(){
            System.out.println(str);
        }
    }
}
```
**重构后**
"com\\refactoring\\source\\OuterClass.java" 文件删除内部类， 文件内容如下：
```
class OuterClass {
    String str = "test";
    public void outermethod(){
        InnerClass ic = new InnerClass(this);
        ic.print();
    }
}
```
新增"com\\refactoring\\source\\InnerClass.java"文件，文件内容如下：
```
class InnerClass {
    private final OuterClass outerClass;
    public InnerClass(OuterClass outerClass) {
        this.outerClass = outerClass;
    }
    public void print() {
        System.out.println(outerClass.str);
    }
}
```
