真的理解接口了吗?

huangyongmusic 2011-02-14 10:07:46
在定接口时, 接口中带参数的方法, 这个参数的类型应该为什么类型呢? 书上说把这个参数类型建为定义的接口类型, 可以变成通用参数, 再这个接口被某个类实现时,再把这个参数强制转换为相应的对象.

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

public class Myclass implements Payoff {
/* 实现接口
pay (Payoff aa) { Myclass bb=(Myclass)aa; .... }
.....
.....
}
...全文
437 45 打赏 收藏 转发到动态 举报
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxdsly 2011-02-19
  • 打赏
  • 举报
回复
public interface Payoff<T>{
void pay(T t) {};
}

public class Myclass implements Payoff<M> {
/* 实现接口
pay (M m) {

}
.....
.....
}


xihuanni0509 2011-02-19
  • 打赏
  • 举报
回复
[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]
chzhm159 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 huangyongmusic 的回复:]

书上是这么说的:
对象与对象之间的强制转换, 条件是两者之间要有继承关系,不然不能转换.
对象与接口之间的强制转换, 条件是这个对象必须要实现这个接口.
[/Quote]
楼主的意思稍微有点懂,其实你说的就是java的多态机制,父类的引用指向子类对象,也就是可以定义个父类型参数,但是你可以传入子类对象,
对象与对象之间可以转换是子类可以转向父类,但是父类不能转向子类,即便是两个子类同时继承了一个父类,也不能转,Dog,Cat都继承了animal互相转化吗?不能。
对象跟接口之间互转类似上面的
huangyongmusic 2011-02-18
  • 打赏
  • 举报
回复
不知道大家还记得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;
}
}

这里不就是父类对象强制转换为子类对象的吗?

父类对象与子类对象之间强转换
接口类型对象与类对象之间的强制转换 不可行吗?
zhou961270 2011-02-18
  • 打赏
  • 举报
回复
你如果真想達到參數通用的話,就傳Object對像,再去轉成其他對象
Paulz 2011-02-18
  • 打赏
  • 举报
回复
说几句吧:
1.楼主你的定义接口的语法都是错误的。
2.25楼的朋友,你的定义接口的语法也是错误的。
3.要好好理解一下多态的定义,到底什么是多态,先把面向对象编程的三个特征搞清楚。
finalsummon 2011-02-17
  • 打赏
  • 举报
回复
不能理解lz的意思
xihuanni0509 2011-02-17
  • 打赏
  • 举报
回复

注意包结构
//----
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);
}
}


huangnamusic 2011-02-17
  • 打赏
  • 举报
回复
我运行了上面的程序,将
Test000 t1 = new Test001();//接口类型变量存贮的是一个什么东西,一个对象还是一个指向对象
Test001 t2=(Test001)t1;
改为 Test001 t1=new Test001();
Test000 t2=(Test000)t1;

结果两种都是可行的, 我想是不是换成 Test000 t3=(Test000)t3 ,再创建一个T3类看看
huangnamusic 2011-02-17
  • 打赏
  • 举报
回复
请问一下 类A 实现了接口check,那么A类对象可以强制转换为接口类型的对象吗?
A a=new A();
check x=(check)a; 是否可行?

或: 将接口类型的对象强制转换为A类型,
check b;
A a=A(b); 是否可行?
huangnamusic 2011-02-17
  • 打赏
  • 举报
回复
请哪个大侠能细解一下
O溺水的鱼0 2011-02-17
  • 打赏
  • 举报
回复
楼主说的应该是多态,或者说是工厂模式,在百度中搜索下工厂模式就可以知道原理了。
huangnamusic 2011-02-17
  • 打赏
  • 举报
回复
看例子, 先建一个文本文件,写个接口类 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
huangyongmusic 2011-02-17
  • 打赏
  • 举报
回复
设有两个类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类对象,这样子可以吗?
toss2000 2011-02-17
  • 打赏
  • 举报
回复
这个需要看源码了
huangyongmusic 2011-02-17
  • 打赏
  • 举报
回复
CSDN中就有下载的电子书
http://d.download.csdn.net/down/1426631/guiguo123
huangyongmusic 2011-02-17
  • 打赏
  • 举报
回复
21天学通Java 2(第三版 专业参考版 附1光盘)
图书作者: (美)Laura Lemay、Rogers Cadenhead 著 陈武、袁国忠 译   
出版社: 人民邮电出版社  
ISBN: 7115121869   
出版时间: 2004-5第1版

请看一下 第6天课程 包. 接口和其他类特性
Joop_Song 2011-02-17
  • 打赏
  • 举报
回复
楼主把我搞蒙了。。。杯具。。
pingjiuzhou 2011-02-17
  • 打赏
  • 举报
回复
请问下看的什么书?加我好友,其实这个意思是对的,但是没表述清楚罢了
恋之最 2011-02-16
  • 打赏
  • 举报
回复
这种基础问题靠理解 大哥 这个都还发到CSDN来
加载更多回复(23)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧