在定接口时, 接口中带参数的方法, 这个参数的类型应该为什么类型呢? 书上说把这个参数类型建为定义的接口类型, 可以变成通用参数, 再这个接口被某个类实现时,再把这个参数强制转换为相应的对象.例: interface Payoff{
void pay(Payoff aa) {};
}public class Myclass implements Payoff {
/* 实现接口
pay (Payoff aa) { Myclass bb=(Myclass)aa; .... }
.....
.....
}
void pay(Payoff aa) {};
}public class Myclass implements Payoff {
/* 实现接口
pay (Payoff aa) { Myclass bb=(Myclass)aa; .... }
.....
.....
}
void pay(Payoff aa) {};
}
这句话语法对么?
.....
.....
这句话语法也不对。
void pay(Payoff aa) {};
}
想要更具有通用性只要这样:
Payoff aa=new Myclass();
使用的时候用aa.pay();就代表使用的Myclass.pay();
如有业务变更只要增加实现类即可,不需修改
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();
}
}
public Message checking(check aa) {}
public Message checking1(Object aa) {}
public Message checking2(其它接口类型 bb) {}
}
如果有一辆卡车有故障,这辆卡车就是参数,被代入到接口方法中去被调用,卡车是一个具体的对象,可以说是一个Object对象,如果在接口中只定义了checking1(卡车类型的参数),那么该接口的功能就很小,被局限了,那么轿车被代入到checking1()方法,则就无法进行检查,程序可能会发生错误, 当我们把接口中方法的参数设为接口类型时, 则只要是实现了该接口类型的对象都可以代入进行检查! 这是为什么呢? 答: 其实这是一种规定, 变量的类型被声明为接口时,意味着它指向的对象必须实现该接口,即能够理解该接口指定的所有方法.
注意包结构
//----
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);
}
}
图书作者: (美)Laura Lemay、Rogers Cadenhead 著 陈武、袁国忠 译
出版社: 人民邮电出版社
ISBN: 7115121869
出版时间: 2004-5第1版 请看一下 第6天课程 包. 接口和其他类特性
http://d.download.csdn.net/down/1426631/guiguo123
B b=new B();
A a=(A)b;
A与B本来是无法强制转换的,现在因为都实现了接口check, 那么现在它们之间可以强制转换吗?或者是 check b;
A a=(A)b; 把实现了接口的对象强制转换为A类对象,这样子可以吗?
内容是
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
A a=new A();
check x=(check)a; 是否可行?或: 将接口类型的对象强制转换为A类型,
check b;
A a=A(b); 是否可行?
Test000 t1 = new Test001();//接口类型变量存贮的是一个什么东西,一个对象还是一个指向对象
Test001 t2=(Test001)t1;
改为 Test001 t1=new Test001();
Test000 t2=(Test000)t1;结果两种都是可行的, 我想是不是换成 Test000 t3=(Test000)t3 ,再创建一个T3类看看
对象与对象之间可以转换是子类可以转向父类,但是父类不能转向子类,即便是两个子类同时继承了一个父类,也不能转,Dog,Cat都继承了animal互相转化吗?不能。
对象跟接口之间互转类似上面的
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
MyForm myForm = (MyForm) form;// 这里的form是父类对象吧?
return null;
}
}这里不就是父类对象强制转换为子类对象的吗? 父类对象与子类对象之间强转换
接口类型对象与类对象之间的强制转换 不可行吗?
接口类型对象与类对象之间的强制转换 不可行吗?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]
void pay(T t) {};
}public class Myclass implements Payoff<M> {
/* 实现接口
pay (M m) {
}
.....
.....
}