2013-10-31 20 views
-1

我想弄清楚我將如何使用以下情況創建超類調用。如下所示,我所擴展的類的子類在其構造函數中只有一個參數,而超類有兩個。在這種情況下,我該如何進行超級電話會議?

下面是我的代碼:

import java.io.*; 
    import java.util.*; 

    public class DirectorySize extends DirectoryProcessor 
    { 
     /* 
     Dan Czarnecki 
     October 29, 2013 

     Class variables: 
      private HashMap<File, DirectoryStatistics> directory 
       A HashMap object that will contain the files and folders 
       within a directory 

     Constructors: 
      public DirectorySize(File startingDirectory) throws FileNotFoundException 
       Creates a DirectorySize object, takes in a pathname (inherited from DirectoryProcessor class, 
       and has a single hashmap of a DirectoryStatistics object to hold the files and folders 
       within a directory 

     Methods: 
      public void processFile(File file) 
       A method that searches for all the files and folders 
       within a directory and calculated the total size 
       for each of them 
      public void run() 
       Calls the processFile() method and prints out 
       the files and folders (along with their sizes) 
       in the directory 
      public String toString() 
       Returns each element in the directory Vector 


     Modification History 
      October 29, 2013 
       Original version of class 
       Implemented run() and processFile() methods 
      October 30, 2013 
       Added implementation of FileFilter to processFile() method 
     */ 
     private HashMap<File, DirectoryStatistics> directory; 

     public DirectorySize(File startingDirectory) throws FileNotFoundException 
     { 
      super(startingDirectory); 
      directory = new HashMap <File, DirectoryStatistics>(); 
     } 


     public void processFile(File file, FileFilter fileFilter) throws FileNotFoundException 
     { 
      DirectoryStatistics parent; 
      int index; 
      File parentFile; 
      boolean find; 


      parentFile = file.getParentFile(); 
      parent = new DirectoryStatistics(parentFile); 
      find = directory.containsValue(parent); 

      if(find) 
      { 
       directory.put(parentFile, parent); 
       directory.get(parentFile).setSizeInBytes(file.length()); 
       directory.get(parentFile).incrementFileCount(); 
      } 


      if(find) 
      { 
       directory.get(find).addToSizeInBytes(file.length()); //increments the total size of the directory 
       directory.get(find).incrementFileCount(); //increments the number of files in the directory 
      } 


     } 

     public void run() throws FileNotFoundException 
     { 
      File file; 
      file = directoryLister.next(); 


      while(file != null) //the following will be called when the File object is not null 
      { 
       processFile(file, fileFilter); 
       file = directoryLister.next(); 
      } 

     } 

     public String toString() 
     { 
      Set<File> parentFile = directory.keySet(); 
      File[] parentFileArray = parentFile.toArray(new File[0]); 

      String str; //creates a new string that will hold the file or directory name 
      str = ""; 

      for(int i = 0; i < parentFileArray.length; i++) 
      { 
       str = str + directory.get(parentFileArray[i]).toString(); 
      } 

      return str; 
     } 
    } 
import java.io.*; 

abstract public class DirectoryProcessor extends DirectoryLister 
{ 
    /* 
    Dan Czarnecki 
    October 14, 2013 

    Class variables: 
     private DirectoryLister directoryLister 
      A variable of type DirectoryLister that will list all the directories from a given pathname 

    Constructors: 
     public DirectoryProcessor(File startingDirectory) throws FileNotFoundException 
      Makes a super call to the startingDirectory variable, creates a new DirectoryLister object 

    Methods: 
     abstract public void processFile(File file, FileFilter fileFilter) 
      This abstract method's function is implemented in the TotalFileSize class to process each file within a directory and return the total size of them 

     public void run() 
      Basically takes the functionality what was originally done with our FileLister and DirectoryLister class (within the driver class) 
      but has now moved to its own method 

    Modification History: 
     October 14, 2013 
      Original version of class 

     October 16, 2013 
      Class and processFile() method have been made abstract 

     October 30, 2013 

    */ 

    public DirectoryLister directoryLister; 
    public FileFilter fileFilter; 

    public DirectoryProcessor(File startingDirectory, FileFilter fileFilter) throws FileNotFoundException 
    { 
     super(startingDirectory); 
     directoryLister = new DirectoryLister(startingDirectory); 
     fileFilter = this.fileFilter; 
    } 

    abstract public void processFile(File file, FileFilter fileFilter) throws FileNotFoundException; 


    public void run() throws FileNotFoundException 
    { 
     File file; 
     file = directoryLister.next(); 

     while(file != null) //the following will be called when the File object is not null 
     { 
      processFile(file, fileFilter); 
      file = directoryLister.next(); 
     } 

    } 
} 

我怎樣才能讓這種情況下的超呼?

+0

TLDR。也許一個SSCCE會吸引更多的hekp。 – John3136

+2

如果您僅包含與您的問題相關的代碼 – Dermot

+0

,或者包含與您的問題相關的所有代碼,則您可能有更好的機會獲得答案。這只是兩個缺少很多依賴關係的類。 – Ben

回答

0

如果我正確理解你,你是指DirectorySize作爲子類別DirectoryProcessor超級類,如果你要調用父類的構造函數DirectoryProcessor(File startingDirectory, FileFilter fileFilter)DirectorySize在構造函數中,那麼你將不得不增加super(startingDirectory, fileFilter)作爲第一個發言。

隨着super(parameter list),具有 匹配參數列表中的超類構造函數被調用。

+0

感謝您的幫助,現在我已經解決了這個問題。 –

0

你的問題是不明確的,但如果你指的是在派生類的構造函數調用super(),是的,你必須提供所需要兩個參數。