Java-为什么将一个有实现子类的父接口传到一个接口做参数行不通?
问一下 为什么将一个有实现子类的父接口(A)传到一个接口方法(B)做参数行不通?
Test:
public interface B{
public boolean function(A);
}
主要是想借A调到它下面的子实现类
============================================================================
背景:
1.这是操作数据库的功能类(连接数据库,Sql语句的提交,让实现类来继承使用)
2.这是增删改查的接口(编号:B)
3.实现增删改查的三个实现类(编号:B_abc)
4.三个实体类是给B_abc做参的(编号:A_abc):
如果写三个接口分别用A_abc做参,然后在写三个实现类来实现接口,我觉有些不妥。
所以我想有没办法只写一个增删改查的接口,但是问题来了:怎么只写一个接口,但是然三个实现类又能调用到三个实体类?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是基于Java的多态的思想的,明显没有问题
这种情况应该用泛型比较好……
public interface EntityDao<T>{
public boolean add(T obj);
public boolean edit(T obj);
//...
}
public class BillDaoImpl implements EntityDao<Bill>{
public boolean add(Bill obj);
public boolean edit(Bill obj);
//...
}
调用的时候这样
EntityDao<Bill> dao = new BillDaoImpl();
dao.add(billObj);
我去尝试下,这个是可以实现的。
//Inerface A
public interface A {
public void show();
}
//implements A
public class AImpl implements A {
@Override
public void show()
{
System.out.println("this is A");
}
}
//Interface B
public interface B {
public void invokeA(A a);
}
//Implemts B
public class BImpl implements B {
@Override
public void invokeA(A a) {
a.show();
}
}
//Main method
public static void main(String[] args) {
A a = new AImpl();
B b = new BImpl();
b.invokeA(a);
}
我用的是Java。没有问题。
补充:还是可以实现的
接口A类有一个show()方法,三个实现类,B的里面还是一个调用A方法,然后有三个实现类,
Main类的主方法
public class Main
{
public static void main(String[] args)
{
A a1 = new AImpl1();
A a2 = new AImpl2();
A a3 = new AImpl3();
B b1 = new BImpl1();
B b2 = new BImpl2();
B b3 = new BImpl3();
b1.invokeA(a1);
b1.invokeA(a2);
b1.invokeA(a3);
}
}
我看你的代码里面,第一那个问号,我不太明白
public void add(?)
//应该是
public void add(Object obj)
但是这样要判断传入类型,是违背java继承原则的,所以一般写dao的实现类都是 根据 entity数编写不同的dao