在java中编写好的抽象类

时间:2015-02-03 10:21:06

标签: java abstract-class

我有以下需要,请帮助我写好和抽象的课程。

  1. 基于类型
  2. 需要不同类型的操作

    我有一个抽象类,

    abstract public class FileHelper{
    
        //Template method
        //This method defines a generic structure for parsing data
        public void parseDataAndGenerateFile(String fileDownloadType)
        {
            createHeader(fileDownloadType);
            generateFile();
    
        }
    
    
        //We have to write output in a excel file so this step will be same for all subclasses
    
        public void createHeader(String fileDownloadType)
        {
            System.out.println('Creating HEADER in EXCEL');
        }
        public void generateFile(String fileDownloadType)
        {
            System.out.println('Output generated,writing to XLX');
        }
    }
    public class ExcelDataParser extends FileHelper {
    String fileDownloadType="";   
    }
    
    public class TemplateMethodMain {
    
        public static void main(String[] args) {
            String fileDownloadType="expired"; 
            ExcelDataParser csvDataParser=new ExcelDataParser();
            csvDataParser.parseDataAndGenerateFile(fileDownloadType);
    
    
        }
    
    }
    

    请帮助我,并纠正我这样做的好方法。

1 个答案:

答案 0 :(得分:1)

如果要使用抽象基类,最好在抽象基类中声明抽象方法String getDownloadType()。这些方法必须由派生类重写,并且类型可以在派生类中修复。
例如:

abstract public class FileHelper {

    abstract String getFileDownloadType();

    public void parseDataAndGenerateFile() {
        createHeader();
        generateFile();
    }

    public void createHeader() {
        if ("expired".equals(getFileDownloadType())) {

        } else {

        }
    }

    public void generateFile() {
        if ("expired".equals(getFileDownloadType())) {

        } else {

        }
    }
}

public class ExcelDataParser extends FileHelper {
    @Override
    String getFileDownloadType() {
        return "expired";
    }
}

public class TemplateMethodMain {
    public static void main(String[] args) {
        ExcelDataParser csvDataParser = new ExcelDataParser();
        csvDataParser.parseDataAndGenerateFile();
    }
}


但是如果你不需要每个类型的类,你也可以在单个类中将类型变为一个变量并将类型传递给构造函数
例如:

public class CsvFileHelper {

    private final String fileDownloadType;

    public CsvFileHelper(String type) {
        fileDownloadType = type;
    }

    public void parseDataAndGenerateFile() {
        createHeader();
        generateFile();
    }

    public void createHeader() {
        if ("expired".equals(fileDownloadType)) {

        } else {

        }
    }

    public void generateFile() {
        if ("expired".equals(fileDownloadType)) {

        } else {

        }
    }
}

public class TemplateMethodMain {

    public static void main(String[] args) {
        CsvFileHelper csvDataParser = new CsvFileHelper("expired");
        csvDataParser.parseDataAndGenerateFile();
    }
}