我的理解是:
抽象类是 is-a,接口是 has a,java 可以多继承,但是只能实现一个接口
一般在项目中如果多个类都有用到共同的方法( A ),并且不同类这个方法( A )的实现不同,我会抽象出一个抽象类
然后多个子类继承它,子类各自重写这个方法的逻辑(好像这边也可以用接口实现???)
当这些子类有共同的方法实现( B ),只能用抽象类,因为接口不能有方法实现。
但是 java8 支持接口方法实现,那么是不是除了类可以多继承,接口只能实现一个这个区别外
接口可以完全代替抽象类了?
谢谢~
![]() | 1 mreasonyang 2020-06-14 17:24:33 +08:00 via iPhone 并不能完全替代抽象类啊,比如接口里搞定不了非静态属性,访问控制也没有。而且 default 方法的出现个人觉得更多的考虑是对接口功能的扩展而不是用来替代抽象类的。 |
![]() | 2 zhazi 2020-06-14 17:30:43 +08:00 via Android 可以多继承吗?只能实现一个接口吗? |
![]() | 3 zsdroid 2020-06-14 17:44:54 +08:00 多继承单实现??我学了个假的 java 。 |
![]() | 4 Uchiha0bito 2020-06-14 17:45:04 +08:00 意义上还是有区别 一个强调继承 一个强调拓展功能 |
5 DoodleSit 2020-06-14 17:59:49 +08:00 我学的是个假 java 。。。 |
6 namelosw 2020-06-14 18:01:46 +08:00 via iPhone 用了 Scala 你就知道,这俩没区别. Scala 的 trait 该有的功能全有,就差个 constructor 今年 Scala 3 会加上. 看起来有区别是因为 Java 实现的功能太少. 尝试跟你解释继承组合有区别的人都是基于 Java 实现,多大鞋多大脚自动脑补的... 除了 Scala 像常见的 Python 也很少区分. 继承组合都可以用多继承流畅表达. |
7 guangdao 2020-06-14 18:29:54 +08:00 多继承单实现...兄弟学的怕不是 avaj 吧(( |
8 hippieZhou 2020-06-14 18:55:54 +08:00 你可以这样理解:抽象类再抽象也是类,所以它规定了继承它的实例是什么,但接口是对行为的抽象,规定了继承它的实例能干什么;所以抽象类描述是什么,接口描述能干什么,:) |
10 jinzhongyuan 2020-06-15 09:41:28 +08:00 这个问题 得 从 功能 和 语义 俩方面 来想 |
![]() | 11 Jafee 2020-06-15 10:09:29 +08:00 |