为了账号安全,请及时绑定邮箱和手机立即绑定

抽象类和接口?

抽象类和接口?

翻阅古今 2019-03-12 17:15:01
请问在什么情况下,将对象抽象为一个抽象类?在什么情况下,该将对象抽象为一个接口?我知道他们两个的区别,就是想知道在什么场景下该抽象为哪种?
查看完整描述

9 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

比如说生物和人 此时生物可以当做接口,人当做实现生物的抽象类,男人女人作为具体实现类,为什么可以这样设计?因为生物是个非常非常抽象的概念,你很难抽象出它的具体行为(也就是具体的方法实现),此时可以当做接口,人为何可以作为抽象类,因为他可以有具体的行为动作实现,比如,摸爬滚走,但是可能男人女人的性征不一样,同时可能还有一些公有的行为 但是行为特征不一样 这可以当做抽象类的抽象方法,让子类实现。大概是这样。


查看完整回答
反对 回复 2019-04-25
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

接口表示一个能力/行为。例如:人会跑,狗也会跑,就可以定义接口IRunable。 使用接口很好实现组件间解耦。
抽象类就是为了实现多态,使代码更方便扩展。

查看完整回答
反对 回复 2019-04-25
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

接口就好像是100% 纯天然的抽象类。


查看完整回答
反对 回复 2019-04-25
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

接口的话更偏向于为一群类定一个协议, 而抽象类的话已经向实现迈进了一步。

例如模板方法模式中就用到了抽象类,实现了一些通用的方法, 而将不同的方法延迟到子类再实现。


查看完整回答
反对 回复 2019-04-25
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

举个简单的例子,你现在想要抽象所有国家的人,那么你会想到抽象成一个接口,然后有个方法叫sayHello:


public interface Human{

    

    String sayHello();

}

OK,现在每个实现了这个接口的对象只要实现sayHello方法,就表示了各个国家的人,他们拥有了不同的打招呼的的方式。


但是现在业务复杂起来了,你需要这些人还具备一些通用的能力,比如cry,walk,那么这个时候,你是不是应该考虑把Human抽象成为一个抽象类,像这样:


public abstract class Human{

    

    public abstract String sayHello();

    

    public String cry(){

        System.out.println("wu~wu~wu~wu~wu~");

    }

    

    public String walk(){

        System.out.println("左右左 左右左");

    }

}

总结一下,就是如果只有抽象的方法,那么就用接口,如果还有通用的具体方法实现,则用抽象类


查看完整回答
反对 回复 2019-04-25
?
波斯汪

TA贡献1811条经验 获得超4个赞

参考:
The Java™ Tutorials :: Learngin The Java Language :: Interfaces and Inheritances :: Inheritances :: Abstract Methods and Classes :: Abstract Classes Compared to Interfaces

查看完整回答
反对 回复 2019-04-25
?
月关宝盒

TA贡献1772条经验 获得超5个赞

抽象类用于抽象事物,接口抽象行为


查看完整回答
反对 回复 2019-04-25
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

该类定义统一操作,为对象提供方法


查看完整回答
反对 回复 2019-04-25
  • 9 回答
  • 0 关注
  • 463 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信