如何在子类中调用父类对象?

时间:2013-07-16 18:13:58

标签: java

我不确定我是否正确地问这个问题,因为我正在尝试自学Java。我有一个包含main方法的类,在这个类中有几个需要使用java.util.Properties访问我的用户设置的子类。我必须在每个子类中创建属性对象以使其工作,并且我不能使用configFilePath引用该对象,它必须为null。我想知道我是否可以在父类中创建这个公共对象,所以我不需要在它的所有子类中创建它?这是我的代码,我真的不确定我做得对,虽然它有效。

public class Frame1 extends JFrame {
    Settings config = new Settings(); //this is the object I want to reference within subclasses

    class Update extends SwingWorker<Integer, Void> {  //first subclass

        @Override
        protected Integer doInBackground() throws Exception {
            Settings config = new Settings(configFilePath);  //yet I have to create the object within every subclass, this time an argument is required.  
            String templateDir = config.getProperty("templatedir");
            String writePath = config.getProperty("outputdir");
            //do some logic code, not required for my question
        }

        @Override
        protected void done() {
            Update2 update2 = new Update2();
            update2.execute(); //start the next subclass which also needs access to Settings(configFilePath)
        }
    } 
}

public class Settings extends JFrame {
    String configFilePath = "C:/path/to/settings.properties";
    Properties properties = new Properties();
    public Settings(String configFilePath) throws IOException {

        this.configFilePath = configFilePath;
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(configFilePath);
            properties.load(fis);

        } catch (FileNotFoundException e) {
            setDefaults();
        } finally {
            if (fis != null) {
                fis.close();
            }
        }
    }
}

我不确定我是否正确这样做,它似乎工作但似乎相当多余,每次我需要访问我的用户设置时都必须创建配置对象。我希望以前没有问过这个问题,如果有问题请联系我,因为我找不到它。

2 个答案:

答案 0 :(得分:2)

您可以将Setting类创建为Singleton模式,这是一个示例:

public class Settings extends JFrame{
    String configFilePath = "C:/path/to/settings.properties";
    Properties properties = new Properties();

    private static Settings instance;

    public static Settings getInstance(){
       if(instance==null){
           instance = new Setting();
       }
       return instance;
    }

    private Settings() throws IOException {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(configFilePath);
            properties.load(fis);

        } catch (FileNotFoundException e) {
            setDefaults();
        } finally {
            if (fis != null) {
                fis.close();
            }
        }
    }
}

在系统的任何其他类中使用:

Settings.getInstance().getProperty("...");

答案 1 :(得分:1)

Update,您可以使用Frame1.this访问this的{​​{1}}(因为Frame1Update的内部类。

然后,要访问Frame1,您可以使用config

这是一个有效的例子:

Frame1.this.config