现在有两个类A、B
类A为监听类,需要提供一个接口给B当A收到客户端的请求时,需要B来调用A,来实现A的后半部分代码。
class A{
 public void listen{
    //我的A类代码
    //B类来实现的代码
}
}问:A类要怎么做,才能成为这种接口。及A类的前半部分代码是写死在A类中的,但A类收到客户端信息
后,继续执行的后半部分代码在B类中,并且B类是任意的东西,及A是提供接口。

解决方案 »

  1.   

    public class A {public void listen () {...//Some operation}}publc class B extends A {public void listen () {
    super.listen();..//B's additional operation
    }
    }publc class C extends A {public void listen () {
    super.listen();..//C's additional operation
    }
    }
    If you want to use yhese listener, you can construct a factory to create a specific child class.
    public ListenerFactory {
    public static A createListener(String childName) {//input the name of child class
    return (A)Class.forName(childName).newInstance();
    }
    }
      

  2.   

    jFresH_MaN(Contributing to Eclipse) 谢谢你!
        可能是我描述的不够清楚的缘故!
        客户端发送信息,A类收到,A类按照自己的固定代码处理后,还有能够按照B类的部分代码来运行。
        如:A类接收到数据后,B类需要对数据进行处理,而这个处理是不确定的。就是说,B类中的代码是可变的。    我希望是这样,A类的后半部分代码是可变的,可以由B类来填充,也可以由C类,甚至D类来填充!
      

  3.   

    把可变的部分用某个函数名代替。
    例如是要先连接数据库,然后插入记录,最后撤销连接。由于不同的数据库的操作有不同,所以无法固定编码。此时楼主应该在A中编写函数connect(),insert(),和disconnect()。在A的main()函数中写
    main{
    connect();
    insert();
    disconnect();
    }由于以上3个函数只有定义,没有实现,必须有实现接口的类实现。
    这样就可以在A类中规定操作步骤的顺序,但是没有规定具体实现。
      

  4.   

    我的理解没有错啊你看我写的A类,里面的listen方法就是你所说的A的固定处理代码
    然后其他继承的类B,C,D,甚至更多,他们的listen方法里面首先调用super.listen(),也就是说首先执行A的固定代码,然后再执行自己的特有的代码。
    B,C,D可以实现自己的listen方法,然后使用最后那个factory生成特别的实现类,参数就是类的名字,那么这样不就是你所说的后面是可变的了吗?
      

  5.   

    public interface C{
       public void actions();
    }
    public class B implements C{
       public void actions(){//do something here;};}
    public class A{
       public void doThings(C c){
           //A's code;
           c.actions();
    }
    }应用
    public class app{
      public static void main(String args[]){
           B b=new B();
           A a=new A();
           a.doThings(b);//
    }
    }
    B类实现统一的接口,那么在A中调用时,只要在传入参数时指定好正确的B类型就可以
    了。不知道这样能否解决楼主的问题
      

  6.   

    public interface A
    {
     public Hashtable[] getClass() ;
    }
    public class B  implements A
    {
     public Hashtable[] getClass() 
    {
     ………………
         return hb;
    }

    }