书上有一句话这么说的:
当一个类实现一个接口时,它一定要实现接口中定义的所有方法,不然这个类就一定要声明成抽像类。然后给出了这些代码:
public inferface myinterface
{
  public void add(int x,int y)
  public void volume(int x,int y,int z)
}public class interfacedemo implements myinterface
{
  public void add(int x,int y)
 {
   System.out.println(" "+(x+y)); 
 } public void volume(int x,int y,int z)
 {
   System.out.println(" "+(x*y*z));
 
 }} public void static main(String args[])
{
  MyInterFace d=new InterfaceDemo();
  d.add(10,20)
  d.volume(10,10,10);
}这些代码 让我郁闷的是 那些方法写在类里不是更直接么。为什么还要定义接口,这样不是浪费么?

解决方案 »

  1.   

    多数动物都会叫,但又各不相同,去到某个地方里,他们都只知道你是动物,不知道你具体是什么运行,只知道你会叫.
    动物接口
         song()
    人类实现动物接口
    song()
    {
    System.out.println("人叫");
    }
    鸟类实现动物接口song()
    {
    System.out.println("鸟叫");
    }去到某个类的一个方法里
    void ff(动物接口)
    {
      动物叫(传人的实例进来就是"人叫",传鸟的实例进来就是"鸟叫")
    }
    在这个方法只管让"动物叫",具体是哪个动物由实际情况确定
      

  2.   

    接口中所有的方法都是public abstract。
    在接口中声明方法时,不能使用native、static 、final 、synchronized 、private 、protected等修饰符。
    和public类一样,public接口也必须定义在与接口同名的文件中。
    接口中可以有数据成员,这些成员默认都是public static final。
    举例:
    interface Math
    {
    double PI=3.1415926;
    }
    class Arithmetic implements Math
    {
    double roundArea(double radius)
    {
    return PI*radius*radius;
    }
    }
    class Student
    {
    public static void main(String[] args)
    {
    Arithmetic a=new Arithmetic();
    System.out.println(a.roundArea(3));
    System.out.println(Math.PI); //ok
    System.out.println(Arithmetic.PI); //ok
    System.out.println(a.PI); //ok
    }
    }
      

  3.   

    对于接口我其实也不知道它具体的实现过程,但我知道它的目的,我就简单说吧,
        这不得不先从面向对象的一个重要特性多态说起,简单说多态的目的就是为能用一个统一的接口去实现(驱动)不同的实现(各个实现这个接口的类的处理函数,这个处理函数就是接口里声明但没给出具体代码的那个函数,即名称一样),就好象用一个标准的三角插座就可给任何电器供电一样。
        假设我们定义一个接口“供电系统”,“供电系统”里声明了一个方法“三角插座()”,那么实现这个接口(可理解为遵循此接口协议,就好象各电器厂商都遵守国际插座标准尺寸一样)的各种类(各类电器)就可以都只用这种统一化的"三角插座()"就行了。往后当我们设计到一个想用电的类时,就可直接去调用这个三角插座(),而且要注意的是任何实现(遵循)此接口的类都可以调用相同的“三角插座()”这个接口。
        说到此你可能觉得这个道理其实你也明白,主要是不明白于为什么java要那么做?这还得从人类这个东西说起,你要知道这世界是以人类为主的,当然什么事都要以人为本了,人类是惰性的动物,什么都图方便,发明多态也是,你先别管它那些污七八糟的概念,其目的就是为模仿现实生活的,简单说就是标准化,说穿了也还是为了方便,总之我们生活处处是标准,目的也就想处处方便。回到编程领域也是,多态就是为达到用一个统一的动作来达到驱动多种机器的目的,就好象一个标准的三角插座就可驱动所有遵守此插座协议的电器一样,这就是目的,那么回到手段就是编译器的事了,java采用了独立化的接口的方式,这也不过是java实现以上目的的手段而已,你别追究它为什么这样,这是它的方式,你就管记住那段几乎是固定化的实现接口的代码块。
    重申一次:弄清它的目的,别管它用什么手段,把它背下来得了。
      

  4.   

    接口是个规范
    比如:主板上有PCI接口
    声卡,网卡只要是PCI接口的,就可以插上.因为他们都implemens PCI接口.
      

  5.   

    接口是对多态的支持,也是对代码的重构。
    只有在有很多类都做同一件事的时候你就感觉到了他的好。
    比如A,B两个类都有add()方法是,你怎么知道处理的是那一个。但有了接口他自己就搞定了。
      

  6.   

    刚开始也是和你想的一样,但后来就明白了举个例子,现在许多的商家都制造CPU,主板,但如果把CPU插到主板上,那就需要一个接口.CPU商家制造个接口程序,由主板商来实现就行了,就好像是个标准,如果没这些接口.那造出来的东西都没法用了.我说的不好,你自己理解一下.
      

  7.   

    想必楼主看到楼上的解说也烦了吧,嘿嘿。其实楼上的大哥级人物说的很对,只是咱们新手不太懂,我是这样想的:
    接口可以使一个子类有多个父亲。
    如 已定义了三个接口 interface1,interface2,intface3;
     pblic class Test implements interface1,interface2,interface3{
         .......
    }
    楼主的例子很简单,只是让我们理解接口的用法而已。
      

  8.   

    接口就是定义一个大众化的方法,然后让你方便使用,以后其他的类都不用这么麻烦的定义这么多了,关键是方便.接口的修饰自动为public static但是你也可以加上去,一般不鼓励这样,还有,你说的抽象类和接口,你说如果接口中的方法未被类实现那么他就要定义为抽象类,这个就是一种错误的观念,抽象类里面未实现的方法,在实例化的子类必须要实现,否则继承下来的子类必须声明为abstract也就是说,扩展于抽象类的子类同样要实现所有未实现的方法.
      

  9.   

    interface,接口,其实如果用国人的思维方式来理解不如翻译成"契约"或"合同"。   
      在interface("契约"或"合同")里承诺了将来要实现的功能,interface里的函数声明就是这种承诺。比如,合同C承诺了三个功能:   function1()、   function2()、function3(),在Java里写成:     
        
      interface   C   
      {   
          void   function1();   
          void   function2();   
          void   function3();   
      }   
        
      这张合同给两种人用,一是对这些功能负责的承办单位,二是使用这些功能的使用单位。   
        
      承办单位负责实现功能,"实现"两个字在Java里用implements来表示,功能的实现者,即,承办单位本身是个Class,所以"承办单位A负责实现合同C"这句话在Java里写成:   
        
      class   A   implements   C   
        
      三个功能function1()、function2()、function3()的具体实现代码也要放在Class   A中,这个负责实现合同(interface)的承办单位里:     
        
      class   A   implements   C   
      {   
          void   function1()   
          {   
              System.out.println("Hello1");   
          }   
        
          void   function2()   
          {   
              System.out.println("Hello2");   
          }   
        
          void   function3()   
          {   
              System.out.println("Hello3");   
          }   
      }   
        
      就这样承办单位(class   A)实现了合同(interface   C)中承诺的三个功能。   
        
        
      另一方面,合同(interface)的使用者不需要知道三个功能是如何具体实现的,它只管通过这个合同(interface)来使用其中承诺的三个功能就是了。   
        
      这样,interface起的作用就如同一份合同,是在实现类和使用类之间的桥梁。
      

  10.   

    假如你是系统设计者, 比如Eclipse设计者, 你写一这个平台, 然后必须调用其他人的插件, 但是你不知道以后他们的插件会咋写, 所以你可以设计一组接口, 规定他们必须实现这些方法.而你的代码就可以调用这些接口, 而不需要实现类