当前位置: 技术问答>java相关
基类与接口?(虽然才知道JAVA版something happened,但是有问题还是得冒险问啊)
来源: 互联网 发布时间:2015-08-24
本文导语: 举个例子 myFileFilter.java的内容: class myFileFilter implements FilenameFilter { public myFileFilter(String name, String extension) { this.name = name; this.extension = extension; } //接口方法定义...... p...
举个例子
myFileFilter.java的内容:
class myFileFilter implements FilenameFilter
{
public myFileFilter(String name, String extension)
{
this.name = name;
this.extension = extension;
}
//接口方法定义......
private String name;
private String extension;
}
testFile.java的内容:
class testFile
{
public static void main(String[] args)
{
File myDir = new File("c:\javasrc\");
.......
FilenameFilter select = new myFileFilter("F", "java");
File[] contents = myDir.listFiles(select);
......
}
}
我的问题是,为什么要把select 申明为FilenameFilter接口的对象呢?应该是myFileFilter才对啊。而且我也试过了,用后者申明运行出来的结果是一样的。
难道这里的FilenameFilter是myFileFilter的基类?如果是这样的话,在myFileFilter的类定义中应该是class myFileFiler extends FilenameFilter才对啊。
或者说接口可以当基类来使用?
myFileFilter.java的内容:
class myFileFilter implements FilenameFilter
{
public myFileFilter(String name, String extension)
{
this.name = name;
this.extension = extension;
}
//接口方法定义......
private String name;
private String extension;
}
testFile.java的内容:
class testFile
{
public static void main(String[] args)
{
File myDir = new File("c:\javasrc\");
.......
FilenameFilter select = new myFileFilter("F", "java");
File[] contents = myDir.listFiles(select);
......
}
}
我的问题是,为什么要把select 申明为FilenameFilter接口的对象呢?应该是myFileFilter才对啊。而且我也试过了,用后者申明运行出来的结果是一样的。
难道这里的FilenameFilter是myFileFilter的基类?如果是这样的话,在myFileFilter的类定义中应该是class myFileFiler extends FilenameFilter才对啊。
或者说接口可以当基类来使用?
|
JAVA想避免多重继承带来的问题,但又想有某些类似能力,所以引入的接口(interface)的概念。如果某个类实现了一个接口,那么这个类就是instanceof那个接口了。其实接口就像一个只有方法,没有属性的类吧。
|
不完全是这样。其实接口和类本身还是略有区别。接口定义操作,而类定义实体。
正是因为接口定义操作,所以不需要属性,只要方法。看看名字:
Serializable, Clonable
这样的名字永远不会用于类,只会用于接口。
当然,的确是变相实现了多重继承的一些功能,这个没错。
这里,如果给方法传参数,java编译器自动up casting。所以,你传FilenameFilter还是MyFilenameFilter都一样。但是,前者更清晰。
正是因为接口定义操作,所以不需要属性,只要方法。看看名字:
Serializable, Clonable
这样的名字永远不会用于类,只会用于接口。
当然,的确是变相实现了多重继承的一些功能,这个没错。
这里,如果给方法传参数,java编译器自动up casting。所以,你传FilenameFilter还是MyFilenameFilter都一样。但是,前者更清晰。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。