
# 提取超类
此重构允许选定现有类的成员创建新的超类。这与[内联超类](https://support.huaweicloud.com/usermanual-codeartside/codeartside_01_0144.html)相反。
#### 执行重构
1. 在代码编辑器中，将光标放置在要将其成员提取到超类中的任何位置。
2. 单击右键展示上下文菜单，选择**"重构 \> 提取超类..."**。
3. 在打开的**"提取超类"** 对话框中，提供重构参数。
   
   - 提供提取的超类名称和包。
   
   - 在**"形成超类的成员"** 区域中，选择要提取的类成员。对于方法，选中**"设为抽象"** 复选框，将提取的方法声明为超类中的**abstract**方法，并将其实现保留在原始类中。
   
   - 在**"抽象类的JavaDoc"** 选项中，选择是将JavaDoc注释移动或复制到提取的超类，还是保持原样。
     如下图所示：
     图1提取超类   
     ![](https://support.huaweicloud.com/usermanual-codeartside/zh-cn_image_0000002385315849.png "点击放大") 
   
   
   
   
4. 单击**"重构"**以应用重构。
 
#### 示例
例如，基于提取**ExtractImpl** 类的**print** 方法和**myField** 字段创建一个新的**ExtractAbstract** 超类。在创建的超类中，**print** 方法将被声明为**abstract**。
**重构前**
"com\\refactoring\\source\\ExtractImpl.java"文件内容如下：
```
class ExtractImpl {
   public int myField;
   public static void main(String[] args) {
      new ExtractImpl().print();
   }
   public void print() {
      System.out.println("Hello World!");
   }
}
```
**重构后**
"com\\refactoring\\source\\ExtractImpl.java"文件内容如下：
```
class ExtractImpl extends ExtractAbstract {
   public static void main(String[] args) {
      new ExtractImpl().print();
   }
}
```
同时，生成一个"com\\refactoring\\source\\ExtractAbstract.java"文件，文件内容如下：
```
package com.refactoring.source;
public class ExtractAbstract {
    public int myField;
    public void print() {
        System.out.println("Hello World!");
    }
}
```
