接口编写
interface Test2
{
public void print();
}class InPut1 implements Test2
{
public void print()
{
System.out.println("Hello!");
}
}class InPut2 implements Test2
{
public void print()
{
System.out.println("Hello!");
}
}class InPut3 implements Test2
{
public void print()
{
System.out.println("Hello!");
}
}class InPut4 implements Test2
{
public void print()
{
System.out.println("Hello!");
}
}class Print
{
void pri(Test2 ts)
{
ts.print();
}
}
class OutPut

public static void main(String args[])
{
InPut1 in1=new InPut1();
InPut2 in2=new InPut2();
InPut3 in3=new InPut3();
InPut4 in4=new InPut4();
Print pr=new Print();
pr.pri(in1); 
pr.pri(in2);
pr.pri(in3);
pr.pri(in4);
}
}非接口编写
class Pri1
{
void pri()
{
  System.out.println("hello!");
}
}class Pri2
{
void pri()
{
  System.out.println("hello!");
}
}class Pri3
{
void pri()
{
  System.out.println("hello!");
}
}class Pri4
{
void pri()
{
  System.out.println("hello!");
}
}class OutPut
{
public static void main(String args[])
{
Pri1 pr1=new Pri1();
Pri2 pr2=new Pri2();
Pri3 pr3=new Pri3();
Pri4 pr4=new Pri4();
pr1.pri();
pr2.pri();
pr3.pri();
pr4.pri();
}
}还是没有弄明白接口的用处

解决方案 »

  1.   

    接口的作用其实是提供你 在不改动原有代码的基础上 增加、改变类的功能。那么为什么在设计模式里应用广泛呢?因为在面向对象的设计原则中有那么一条开放封闭原则,内容大致如下:一个良好的设计应该可以在不改动原有代码或者改动少数代码的基础上增加或者改变原有的功能。因此接口正好符合这一需求。接下来看一下代码实例你就会明白。以下代码是模仿JDBC的设计原则所写的,并不是原代码,但是设计思想是一致的,之所以选择这样一个例子是因为你可以对接口的应用有一个感性的认识 假设read()方法从数据库里读取一个数据。由于不同数据库的读数据的实现方法各有不同,因此Java如何统一这一差异呢? interface readData 

    object read(); 
    } 好,Sun把JDBC里读取数据的接口定义成这样。那么厂商A在自己产品的JDBC驱动里这样实现: class dbReader implements readData 

    public object read() 

    //与厂商A数据库相关的读取操作实现 

    } 好了,那么你在你的程序里使用了厂商A的数据库,因此你要用他的JDBC驱动来写程序: class dbProgram 

    //加载驱动 
    //调用相应的JDBC方法取得connection等必要对象 
    object readData=read();//这里的read()方法在JDBC的接口中定义过 
    } 至此,你完成了对于数据库的读取。到此为止一切顺利。 一天,你的程序由于种种原因要使用厂商B的数据库驱动了(也许是你的客户要求这么做,也许是厂商A倒闭了,他的数据库再也不是主流了)。那么你很幸运,因为你使用Java,你使用JDBC访问数据库。你的代码会如何改动呢?通常如果你的数据库变动的话会造成对代码的巨大变动,但是现在,使用JDBC(注意JDBC是一套接口规范)的话,你只要改变你加载的JDBC驱动就可以了,以下的代码一律不用更改。为什么呢?因为厂商A和B的驱动都符合JDBC规范是吧?因此都实现了readData接口中的read()这个方法对吗?这样虽然你更换了数据库,但是你的程序其实是调用了对应数据库的read()方法,因此你可以不改变读取代码而只是更改要加载的数据库驱动就可以。那么Java又是如何实现动态的调用呢?面向对象的程序中可以这样引用一个实现了某个接口的类的实例:readData rd=new dbReader();//接口名称 变量名=new 实现了接口的类的名称() 调用接口中的方法就可以这样,rd.read() 可以看到,在代码中始终可以用接口类型的变量来引用具体实现他的类。这样的好处是不管类的具体实现怎么变,由于他必须实现接口中定义的方法,所以我们始终可以保证用readData接口类型的变量能够调用到具体实现这个接口的类的read()方法。 上面的例子由于是自己乱编的所以我在以实际的JDBC应用来举个例,希望大家能够彻底的弄懂。 
    import java.sql.*; 
    public class first{ 
    public static void main(String args[]) 

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    URL url=" jdbc:odbc:tic "; 
    Connection db=DriverManager.getConnection(url,"fisher","yht8125"); 
    Statement sq_stmt=db.createStatement(); 
    String sql_str="select * from tic"; 
    ResultSet rs=sq_stmt.executeQuery(sql_str); 
    }
     
      

  2.   

    听说过切面编程(AOP)吗,在AOP中,主要用到的都是接口~
      

  3.   

    1、首先定义了一个叫Test2的接口,其中包含了一个方法 pri();接着定义了四个类,每个类都实现了Test2接口,这时候这几个类都必须定义pri方法。——这个基本上是Java中对接口的定义。
    2、main中的例子写的不太好,我觉得改成如下的更能说明问题:
    Test2 pr=new Pri1();
    pr.pri();
    pr=new Pri2();
    pr.pri();
    pr=new Pri3();
    pr.pri();
    pr=new Pri4();
    pr.pri();
    这时候说明对于同一个Test2类型引用变量pr,我可以指向不同的对象,从而使得pr.pri()具有了不同行为。 这是面向对象中的一个非常重要的概念。 凭借这个概念,正如楼上所说,接口可以更容易的改变系统的行为,也即提高了系统的可维护性和可扩展性(当然是在合理应用接口的情况下)。3、顺带做个广告:上海有想学习Java的,可以来 www.javaedu.com.cn 看看
    :)
      

  4.   

    swing编程里的事件就是在他基础上的.