在定接口时, 接口中带参数的方法, 这个参数的类型应该为什么类型呢? 书上说把这个参数类型建为定义的接口类型, 可以变成通用参数, 再这个接口被某个类实现时,再把这个参数强制转换为相应的对象.例: interface Payoff{
    void pay(Payoff aa) {};
}public class Myclass implements Payoff {
 /* 实现接口
   pay (Payoff aa) { Myclass bb=(Myclass)aa; .... }
   .....
   .....
}

解决方案 »

  1.   

    interface Payoff{
      void pay(Payoff aa) {};
    }
    这句话语法对么?
      

  2.   

     pay (Payoff aa) { Myclass bb=(Myclass)aa; .... }
      .....
      .....
    这句话语法也不对。
      

  3.   

    不知道,还记得Struts1.x不, 里面的自定义的Action 中的excute()方法,中接受四个参数,其中有个Form类型的,在方法体中,就有 将父类参数form强制转换为 自己定义的myForm类型,  上面的是把一个接口参数强制转换为本类的一个对象, Myclass aa 与this 是否一样?
      

  4.   

    LZ没有系统的学习java基础吧?
      

  5.   

    interface Payoff{
      void pay(Payoff aa) {};
    }
      

  6.   

    需要传递接口吗,接口只要声明import就可以了
    想要更具有通用性只要这样:
    Payoff aa=new Myclass(); 
    使用的时候用aa.pay();就代表使用的Myclass.pay();
    如有业务变更只要增加实现类即可,不需修改
      

  7.   


    LZ不要把简单问题复杂化对象与对象之间转换,子类可以转化成父类,但子类特有的方法就无法调用
    对象和接口的转换,是一个执行通用功能实现不同目的的途径。对象执行接口,这些对象都必须执行接口中的功能,但在具体对象中,这些功能的名字一样,但实现目的可能不同,这样你可以把对象接口化之后调用同一功能实现不同目的。
    public interface MyInterface{
       public void doSomething();
    }public class Sample1 implements MyInterface{
       public void doSomething(){
          System.out.println("sample1");
       }
    }public class Sample2 implements MyInterface{
       public void doSomething(){
          System.out.println("sample2");
       }
    }public class Test{
       public static void main(String args[]){
          MyInterface my;
          if(...){
             my = new Sample1();
          } else {
             my = new Sample2();
          }      my.doSomething();
       }
    }
      

  8.   

    这种基础问题靠理解 大哥 这个都还发到CSDN来 
      

  9.   

    设定义一个接口 check,它具有检测功能,它有一个方法checking 返回检测结果对象, 它接受一个参数,这个参数代表被检查的对象. interface check { 
     public Message checking(check aa) {}
     public Message checking1(Object aa) {}
     public Message checking2(其它接口类型 bb) {}
      
     }
        如果有一辆卡车有故障,这辆卡车就是参数,被代入到接口方法中去被调用,卡车是一个具体的对象,可以说是一个Object对象,如果在接口中只定义了checking1(卡车类型的参数),那么该接口的功能就很小,被局限了,那么轿车被代入到checking1()方法,则就无法进行检查,程序可能会发生错误,  当我们把接口中方法的参数设为接口类型时, 则只要是实现了该接口类型的对象都可以代入进行检查! 这是为什么呢? 答: 其实这是一种规定, 变量的类型被声明为接口时,意味着它指向的对象必须实现该接口,即能够理解该接口指定的所有方法.
      

  10.   


    注意包结构
    //----
    package com.xinghan.dao;public interface Dao<T> {
    public void check(T entity);
    }
    //----
    package com.xinghan.dao.impl;import com.xinghan.dao.Dao;public class DaoImpl<T> implements Dao<T> { @Override
    public void check(T entity) {
    // TODO Auto-generated method stub
    System.out.println("这里写方法的实现");
    }}
    //----
    package com.xinghan.entity;public class User {}
    //----
    package com.xinghan.dao;import com.xinghan.entity.User;public interface UserDao extends Dao<User> {}
    //----
    package com.xinghan.dao.impl;import com.xinghan.dao.UserDao;
    import com.xinghan.entity.User;public class UserDaoImpl extends DaoImpl<User> implements UserDao {}
    //----
    package com.xinghan.action;import com.xinghan.dao.UserDao;
    import com.xinghan.dao.impl.UserDaoImpl;
    import com.xinghan.entity.User;
    public class UserAction {
    public void check(){
    User user = new User();
    UserDao dao = new UserDaoImpl();
    dao.check(user);
    }
    }
      

  11.   

    21天学通Java 2(第三版 专业参考版 附1光盘)
    图书作者: (美)Laura Lemay、Rogers Cadenhead 著 陈武、袁国忠 译   
    出版社: 人民邮电出版社  
    ISBN: 7115121869   
    出版时间: 2004-5第1版 请看一下 第6天课程 包. 接口和其他类特性
      

  12.   

    CSDN中就有下载的电子书
    http://d.download.csdn.net/down/1426631/guiguo123
      

  13.   

    设有两个类A,B ,A 与B 没有继承关系, 如果在A类中实现了一个接口check, 而B类也实现了这个接口, 那么
     B b=new B();   
     A a=(A)b;
    A与B本来是无法强制转换的,现在因为都实现了接口check, 那么现在它们之间可以强制转换吗?或者是 check b;
          A a=(A)b; 把实现了接口的对象强制转换为A类对象,这样子可以吗? 
      

  14.   

    看例子, 先建一个文本文件,写个接口类 Test000.java 
    内容是
    public interface Test000 {
     public void play(Test000 a);
    }
    保存并JAVAC 再建一个类Test001.java
    内容是
    public class Test001 implements Test000{
     public void play(Test000 a) {
      Test001 t1=(Test001)a; //此处暂时只是测试程序能否通过并输入下面内容
      System.out.println("Test001");
     }
    }
    保存并JAVAC再建一个类Test002.java
    内容是
    public class Test003 {
     public static void main(String[] args) {
      Test000 t1 = new Test001();//接口类型变量存贮的是一个什么东西,一个对象还是一个指向对象
      Test001 t2=(Test001)t1; 
     show(t1,t2);
     }
     public static void show(Test000 a,Test000 b){
      if (a.equals(b))
    System.out.print("接口类型变量存放的对象与类类型的变量存的对象是一样的");
    else 
      System.out.print("两者不等");
     }
    }
    保存JAVAC 并JAVA
      

  15.   

    请问一下 类A 实现了接口check,那么A类对象可以强制转换为接口类型的对象吗? 
    A a=new A(); 
    check x=(check)a; 是否可行?或: 将接口类型的对象强制转换为A类型, 
    check b;
    A a=A(b); 是否可行?
      

  16.   

    我运行了上面的程序,将
      Test000 t1 = new Test001();//接口类型变量存贮的是一个什么东西,一个对象还是一个指向对象
      Test001 t2=(Test001)t1;  
    改为 Test001 t1=new Test001();
         Test000 t2=(Test000)t1;结果两种都是可行的, 我想是不是换成 Test000 t3=(Test000)t3 ,再创建一个T3类看看
      

  17.   

    楼主的意思稍微有点懂,其实你说的就是java的多态机制,父类的引用指向子类对象,也就是可以定义个父类型参数,但是你可以传入子类对象,
    对象与对象之间可以转换是子类可以转向父类,但是父类不能转向子类,即便是两个子类同时继承了一个父类,也不能转,Dog,Cat都继承了animal互相转化吗?不能。
    对象跟接口之间互转类似上面的
      

  18.   

    你如果真想達到參數通用的話,就傳Object對像,再去轉成其他對象
      

  19.   

    不知道大家还记得Struts1.x中的 Action定义,其中的excute()方法接受四个参数,public class MyAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
    MyForm myForm = (MyForm) form;// 这里的form是父类对象吧?
    return null;
    }
    }这里不就是父类对象强制转换为子类对象的吗? 父类对象与子类对象之间强转换
    接口类型对象与类对象之间的强制转换 不可行吗?
      

  20.   

    [code=Jav]接我上面的代码针对楼主的这个问题
    接口类型对象与类对象之间的强制转换 不可行吗?package com.xinghan.dao.impl;import com.xinghan.dao.UserDao;
    import com.xinghan.entity.User;public class UserDaoImpl2 implements UserDao { @Override
    public void check(User entity) {
    // TODO Auto-generated method stub }}package com.xinghan.action;import com.xinghan.dao.UserDao;
    import com.xinghan.dao.impl.UserDaoImpl;
    import com.xinghan.dao.impl.UserDaoImpl2;
    import com.xinghan.entity.User;
    public class UserAction {
    public void check(){
    User user = new User();
    UserDao dao = new UserDaoImpl();
    dao.check(user);
    UserDaoImpl2 dao2 = (UserDaoImpl2)dao;
    }
    }
    这样写是可行的,但是你不觉得这样写没有意义吗?
    如果我要UserDaoImpl2 ,我这样写不就行了UserDao dao = new UserDaoImpl2();
    [/code]
      

  21.   

    public interface Payoff<T>{
      void pay(T t) {};
    }public class Myclass implements Payoff<M> {
     /* 实现接口
      pay (M m) { 
       
     }
      .....
      .....
    }