Java 如何多继承呢?

2019-09-03 22:39:56 +08:00
 kaiyiliu123

最近做个项目,记录一个督办事项的变更、反馈等信息,按时间排序。变更、反馈属于两种类型,所以只能分两张表存放。然后方案是做了个主表,记录变更或反馈的时间,然后每个主表的记录对应一个变更或一个反馈。现在做到返回值这里了,想用一个类型的对象接收变更或反馈记录。这里认为变更是一种类型,反馈是一种类型,想再定义一种类型继承他们的所有属性。何解?或者有别的思路?

4712 次点击
所在节点    Java
25 条回复
sutra
2019-09-03 22:47:07 +08:00
interface
ebony0319
2019-09-03 22:47:44 +08:00
可以用静态内部类
lhx2008
2019-09-03 22:53:20 +08:00
没意义,本来就是两个玩意。把公共部分抽一个父类就行了。要不然就不要这样设计数据库表。
kaiyiliu123
2019-09-03 22:57:57 +08:00
@sutra 那个只能常量吧,我这里要用变量
kaiyiliu123
2019-09-03 22:58:50 +08:00
@ebony0319 具体怎么做?我刚才试了下没想到怎么做,还望指教
kaiyiliu123
2019-09-03 23:00:55 +08:00
@lhx2008 那如果两种类型混合排序有什么简洁的方法吗?
ebony0319
2019-09-03 23:01:29 +08:00
yidinghe
2019-09-03 23:07:42 +08:00
你要创建一个新的类,既属于变更又属于反馈,这样的类是做什么用的?
kaiyiliu123
2019-09-03 23:09:52 +08:00
@yidinghe 用于接收数据库数据,然后可能还会按分类转换类型,想先把数据接收到再说
yidinghe
2019-09-03 23:11:32 +08:00
建议参考 github 的 issue 是如何管理的,你可以从时间线上看到所有对于该 issue 的评论和操作,二者展示方式有所不同
tramm
2019-09-03 23:14:26 +08:00
把返回值赋值给变更&反馈的父类不就好了,然后判断到底是变更还是反馈.
不知道我的理解跟你说的是不是一个意思:D
sutra
2019-09-03 23:22:01 +08:00
说的是这个意思吗:

```
public class Main3 {

static interface Post {
String getId();
}

static class Change implements Post {

@Override
public String getId() {
return "change-id";
}

}

static class Feedback implements Post {

@Override
public String getId() {
return "feedback-id";
}

}

static class PostService {
<T extends Post> T savePost(T t) {
return t;
}
}

public static void main(String[] args) {
Change change = new Change();
System.out.println(new PostService().savePost(change).getId());

Feedback feedback = new Feedback();
System.out.println(new PostService().savePost(feedback).getId());
}

}
```
ys1992
2019-09-03 23:38:23 +08:00
Java 是没有多继承的,多实现可以的!建议好好考虑一下业务场景,这里按照楼主的描述应该是变更和反馈业务类型不同但是流程一致,考虑复用性(偷懒 手动狗头),可以考虑定义抽象类或者定义接口类提供不同子实现
ys1992
2019-09-03 23:39:42 +08:00
具体业务参数带上变更或者反馈类型方便后续业务处理
pink123
2019-09-03 23:41:44 +08:00
@kaiyiliu123 楼主多去 Stack Overflow 去提问,这里不是提问的好地方,关于这个问题可以访问这里 https://stackoverflow.com/questions/21824402/java-multiple-inheritance
merpyzf
2019-09-04 00:09:07 +08:00
如果我来做的话我可能会再去定义一个包含两个类型的类。然后读取和写入的时候都进行一次转换就可以了。这个包含两个类型的类实际上就可以算作是 viewmodel,然后那个单独的类就是和数据表相对应的 entity。
aguesuka
2019-09-04 01:27:22 +08:00
1.Java 如何多继承呢?使用 interface,定义 default 方法.

按照我的理解,你是数据库里有三张表 ;主表主要有三个字段[类型,变更 /反馈主键,时间],然后你想把两张表查出来的数据放一个 List 里面去,因为你说了混合排序;如果我没理解错误的话,你的解决方案应该是[变更 /反馈]同时实现一个公共接口来作为 List 的泛型,里面的对象还是原来的对象,子类没有的字段就 return null;
不管是怎样,排序都可以 list.sort(Comparator.comparing(this::getTimeFromBean));来做.
我在山东做过一个督导考核的项目,听着这需求有点像我同事...
leonme
2019-09-04 08:34:02 +08:00
内部类
jzq526
2019-09-04 08:38:07 +08:00
java 故意设计成了不支持多重继承,所以实现不了。但可以设计一个新的父类,包含你需要的所有内容。或者实现多个接口
rwecho
2019-09-04 10:45:52 +08:00
首先考虑组合 少用继承

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/597688

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX