抽象类和接口?
澳门新葡京官网
澳门新葡京官网
当前位置 : 澳门新葡京官网 > 新葡京娱乐场

抽象类和接口?

请问在什么情况下,将对象抽象为一个抽象类?在什么情况下,该将对象抽象为一个接口?我知道他们两个的区别,就是想知道在什么场景下该抽象为哪种?

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

比如你有好多个类似的对象(想了半天,用别的词不太合适),人也好,东西也好。他们的属性几乎都一样,你就可以把它们抽象成一个类。比如车类,有轮子、发动机、底盘、外壳等属性。new一个对象,来保存当前的属性,可能你要把这些属性保存到数据库,也可能要显示给用户,当前的对象就是起了个保存数据的作用。对象不仅仅能保存数据,还可以有自己的方法,比如发动车。点击某个按钮,调用当前对象的发动的方法。一般类的方法都会和数据的变化有关,我说的是一般,并不是所有。比如数据库连接类,就不会改变数据,只是起到一个连接数据库的作用。
接口一般来说是给外部调用的。你写了一系列的方法,最终能完成一个有用的动作。这一系列的方法最开始的地方就是接口,你可以这么理解。比如一个简单登陆界面,你输入用户名密码之后,点击确定就开始调用后台登录接口,把用户名密码传给服务器,服务器端接收需要一个方法,接收之后要对密码进行验证,又是一个方法。验证之后给客户端返回消息。登录成功或者失败,这一系列动作完成。当然这些你可以压到一个方法里完成,总之开始的地方就是接口。
以上说法比较直白,并不完全准确。

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

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

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

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

举个简单的例子,你现在想要抽象所有国家的人,那么你会想到抽象成一个接口,然后有个方法叫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"左右左 左右左";
    }
}

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

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

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

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

栏目列表

广告位

澳门新葡京官网