题目如下:
源码如下:
package 真题;
import java.util.ArrayList;
import java.util.List;
abstract class AbstractFile{ //抽象类
protected String name;
public void printName(){ System.out.println(name); }
public abstract boolean addChild(AbstractFile file);
public abstract boolean removeChile(AbstractFile file);
public abstract List<AbstractFile> getChildren();
}
class File extends AbstractFile{ //file哪有目录结构啊 所以都是false很正常
public File(String name) { this.name = name; }
@Override
public boolean addChild(AbstractFile file) { return false; }
@Override
public boolean removeChile(AbstractFile file) { return false; }
@Override
public List<AbstractFile> getChildren() { return null; }
}
class Folder extends AbstractFile{
private List<AbstractFile> childList;
public Folder(String name) {
this.name = name;
this.childList = new ArrayList<AbstractFile>();
}
@Override
public boolean addChild(AbstractFile file) {
return childList.add(file);
}
@Override
public boolean removeChile(AbstractFile file) {
return childList.remove(file);
}
@Override
public List<AbstractFile> getChildren() {
return childList;
}
}
public class test_2009 {
public static void main(String[] args) {
//构造一个树形的文件或者目录
AbstractFile rootFolder = new Folder("c:\\");
AbstractFile compositeFolder = new Folder("composite");
AbstractFile windowsFolder = new Folder("windows");
AbstractFile file = new File("TestComposite.java");
rootFolder.addChild(compositeFolder);
rootFolder.addChild(windowsFolder);
compositeFolder.addChild(file);
printTree(rootFolder);
}
private static void printTree(AbstractFile ifile){
ifile.printName();
List<AbstractFile> children = ifile.getChildren();
if(children == null) return;
for (AbstractFile file:children){
printTree(file);
}
}
}
运行结果如下: