Java-为什么将一个有实现子类的父接口传到一个接口做参数行不通?

发布于 2016-10-30 04:21:53 字数 1301 浏览 1305 评论 3

问一下 为什么将一个有实现子类的父接口(A)传到一个接口方法(B)做参数行不通?
Test:
public interface B{
public boolean function(A);
}

主要是想借A调到它下面的子实现类

============================================================================
背景:
1.这是操作数据库的功能类(连接数据库,Sql语句的提交,让实现类来继承使用)
这是操作数据库的功能类(连接数据库,Sql语句的提交)

2.这是增删改查的接口(编号:B)
这是增删改查的接口
请输入图片描述

3.实现增删改查的三个实现类(编号:B_abc)
实现增删改查的三个实现类

4.三个实体类是给B_abc做参的(编号:A_abc):
请输入图片描述

如果写三个接口分别用A_abc做参,然后在写三个实现类来实现接口,我觉有些不妥。
所以我想有没办法只写一个增删改查的接口,但是问题来了:怎么只写一个接口,但是然三个实现类又能调用到三个实体类?

@azige @shine @征wen

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泛泛之交 2017-10-09 02:49:33

这是基于Java的多态的思想的,明显没有问题

灵芸 2017-02-22 08:55:39

这种情况应该用泛型比较好……

 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);

虐人心 2016-12-30 23:57:17

我去尝试下,这个是可以实现的。

//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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文