java接口哦
在java应用开发中,经常需要实现和使用预制的接口,这个接口多数是以参数的形式传入某个
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
的,使用这一类接口,一般遵循以下步骤:
1 要有个类实现该接口,2 生成该类的实例,作为参数传入(此时发生了子类向父类接口的向上转型)。
而实现接口的类有以下几种情况:
(1) 找一个已存在的类(一般是方法调用所在的类)来实现接口
(2) 新建一个类
a 内部类
b 单独的外部类
(3)匿名内部类
下面通过FileFilter的使用来举例介绍各种用法,File类的File[] listFiles(FileFilter filter)的方法可以实现编程定制的对文件或子目录的过滤,这个定制就是要实现FileFilter接口,该接口只有一个方法:boolean accept(File pathname) ,若果返回true,则该文件/目录被保留,否则被滤掉。
用法1:使用调用listFiles方法的类
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
public class DemoFile implements FileFilter{
public static void main(String[] args) {
//给定条件的查询,FileFilter接口的使用
String strdir = ".\\src";//相对于当前路径的子路径
File dir = new File(strdir);
System.out.println(dir.getAbsolutePath()+"下的java文件:"); File[] files = dir.listFiles(new DemoFile());//传入FileFilter接口的实例:实现了FileFilter的DemoFile向上转型为FileFilter接口
for(File filetemp:files){
System.out.println(filetemp.getAbsolutePath()); }
}
//由DemoFile实现FileFilter的accept方法
@Override
public boolean accept(File arg0) { // TODO Auto-generated method stub if(arg0.getName().endsWith("java")) //只返回以java结尾的文件名 return true;
return false;
}
}
使用方法2:使用内部类
import java.io.File;
import java.io.FileFilter;
public class DemoFileter {
public static void main(String[] args) {
DemoFileter df = new DemoFileter(); df.printJavaFiles();
}
public void printJavaFiles(){
//给定条件的查询,FileFilter接口的使用
String strdir = "src";//相对于当前路径的子路径
File dir = new File(strdir);
System.out.println(dir.getAbsolutePath()+"下的java文件:"); //传入FileFilter接口的实例,Fileter实现了FileFilter接口,向上转型为FileFilter接口 File[] files = dir.listFiles(new Fileter()); for(File filetemp:files){
System.out.println(filetemp.getAbsolutePath());
}
}
//内部类实现FileFilter接口
private class Fileter implements FileFilter {
public boolean accept(File arg0) { // TODO Auto-generated method stub if(arg0.getName().endsWith("java")) //只返回以java结尾的文件名 return true;
return false;
}
}
}
使用方法3:使用匿名内部类
import java.io.File;
import java.io.FileFilter;
public class DemoFilter2 {
public static void main(String[] args) { DemoFileter df = new DemoFileter(); df.printJavaFiles();
}
public void printJavaFiles(){
//给定条件的查询,FileFilter接口的使用
String strdir = "src";//相对于当前路径的子路径
File dir = new File(strdir);
System.out.println(dir.getAbsolutePath()+"下的java文件:");
//使用匿名内部类
File[] files = dir.listFiles(new FileFilter(){
@Override
public boolean accept(File arg0) { if(arg0.getName().endsWith("java")) //只返回以java结尾的文件名
return true;
return false;
}
});
for(File filetemp:files){
System.out.println(filetemp.getAbsolutePath()); }
}
}
那么上述3种方法,哪种更好些呢,就这个例子来说,功能上3种方法都能测试通过,但在GUI图形编程的事件处理代码中会大量用到针对事件处理接口的编程,一般选择第1、3种的较多,另外如果该接口会被使用多次,则1、2可能更适合,方法1的局限在于一次不宜实现过多的接口(如3个以上),否则代码的可维护性会变差(因为一个类里面可能会有太多的实现接口的方法)。