一直对java中接口的作用不是太明了。虽说一个类可以implements多个接口,但接口本身只是定义了几个方法,没有任何实际的意义,具体的实现还是要在实现它的类中进行。这样的话,接口还有什么意义呢?
举个例子来说,现有
public interface I
{
method1(){};
}
class A implements I
{
method1()
{
somefunction......
}
}这样写和不实现接口,直接将method1作为class A的方法有什么区别呢?
即:
class A
{
method1()
{
somefunction......
}
}能不能具体举个例子来说明它们在使用上的区别呢?
举个例子来说,现有
public interface I
{
method1(){};
}
class A implements I
{
method1()
{
somefunction......
}
}这样写和不实现接口,直接将method1作为class A的方法有什么区别呢?
即:
class A
{
method1()
{
somefunction......
}
}能不能具体举个例子来说明它们在使用上的区别呢?
如果没有JDBC接口
每个数据库厂商实现一个自己的数据库操作类库
你写个数据库的程序,万一有一天要用别的数据库了..你的所有程序都报废了 !! 但有了JDBC,你就可以用任意一个数据库,而仅仅需要替换一下对应的驱动就OK了 !!!
比如我们在多线程编程中经常用的Runnable接口,它有一个run()方法,一般是implements Runnable,
然后重写run()方法。但是,如果我不implements Runnable,而直接在我的类中定义run()方法(这时,方法名字都可以不一样),然后再声明这个类的一个实例,把这个实例用作Thread类的线程体,我想,在编译的时候肯定编译不过。但是大家想一想,除了没有implements Runnable以外,其他的还有哪点不一样呢?可是就是编译通不过!
所以,我想,接口的作用不仅仅是提供一个没有任何实现的空方法,但我又不知道该怎么解释。
楼上几位兄弟的回答好象有点含糊,或者不客气的说是没有答到点子上,楼主的意思是说为什么不把接口中的空方法直接拿到类中来实现,说“更具层次”恐怕还恰当些;如果是因为实现C++中的多重继承的话,这种继承有什么意思呢?我们继承父类的目的是使用它的方法,它的成员变量,但如果解释为多重继承的话好象没有达到我们的要求吧,我看了你们的回答后还是没领悟透彻。
俺的领悟力差,一家之言,纯是为了讨论,没有人身攻击的意思,请大家不要见怪!
其实“zez(思恩 闭关练功ing...)”的回答给了我不少的启发,我想我有点了解了。接口的作用是抽象对象的一部分功能进行统一的操作。所有实现某接口的类就有这个接口的所有特性。也就是说:
class A implements I{...}
class B implements I{...}
A a = new A();
B b = new B();
然后对象a和b都可以在所有需要参数I的地方使用了。比如另有一个函数function f(I),它需要传一个接口I的参数,那么你可以使用f(a)和f(b)来实现函数的功能。而如果你的类A和B不实现I接口的话,使用f(a)和f(b)就会编译不通过。举一个与runnable接口相类似的listener接口。
class myClass implements ActionListener
{
button1.addActionListener(this); //这里的this指的是myclass,如果不实现ActionListener接口,即使在类中定义ActionPerformed()方法,也无法传递this参数 public ActionPerformed()
{
......
}
}
/*这句话相信用过java控件的人都非常熟悉吧,它的原型如下:
class Button
{
...
addActionListener(Listener) //其中Listener是一个接口,只有实现Listener接口的类才能传进去
{
.......
}
}
*/