认证高级PHP讲师
比如说生物和人 此时生物可以当做接口,人当做实现生物的抽象类,男人女人作为具体实现类,为什么可以这样设计?因为生物是个非常非常抽象的概念,你很难抽象出它的具体行为(也就是具体的方法实现),此时可以当做接口,人为何可以作为抽象类,因为他可以有具体的行为动作实现,比如,摸爬滚走,但是可能男人女人的性征不一样,同时可能还有一些公有的行为 但是行为特征不一样 这可以当做抽象类的抽象方法,让子类实现。大概是这样。
比如你有好多个类似的对象(想了半天,用别的词不太合适),人也好,东西也好。他们的属性几乎都一样,你就可以把它们抽象成一个类。比如车类,有轮子、发动机、底盘、外壳等属性。new一个对象,来保存当前的属性,可能你要把这些属性保存到数据库,也可能要显示给用户,当前的对象就是起了个保存数据的作用。对象不仅仅能保存数据,还可以有自己的方法,比如发动车。点击某个按钮,调用当前对象的发动的方法。一般类的方法都会和数据的变化有关,我说的是一般,并不是所有。比如数据库连接类,就不会改变数据,只是起到一个连接数据库的作用。接口一般来说是给外部调用的。你写了一系列的方法,最终能完成一个有用的动作。这一系列的方法最开始的地方就是接口,你可以这么理解。比如一个简单登陆界面,你输入用户名密码之后,点击确定就开始调用后台登录接口,把用户名密码传给服务器,服务器端接收需要一个方法,接收之后要对密码进行验证,又是一个方法。验证之后给客户端返回消息。登录成功或者失败,这一系列动作完成。当然这些你可以压到一个方法里完成,总之开始的地方就是接口。以上说法比较直白,并不完全准确。
接口表示一个能力/行为。例如:人会跑,狗也会跑,就可以定义接口IRunable。 使用接口很好实现组件间解耦。抽象类就是为了实现多态,使代码更方便扩展。
接口就好像是100% 纯天然的抽象类。
接口的话更偏向于为一群类定一个协议, 而抽象类的话已经向实现迈进了一步。
例如模板方法模式中就用到了抽象类,实现了一些通用的方法, 而将不同的方法延迟到子类再实现。
举个简单的例子,你现在想要抽象所有国家的人,那么你会想到抽象成一个接口,然后有个方法叫sayHello:sayHello:
sayHello
public interface Human{ String sayHello(); }
OK,现在每个实现了这个接口的对象只要实现sayHello方法,就表示了各个国家的人,他们拥有了不同的打招呼的的方式。
但是现在业务复杂起来了,你需要这些人还具备一些通用的能力,比如cry,walk,那么这个时候,你是不是应该考虑把Human
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("左右左 左右左"); } }
参考: Java™ 教程 :: Learngin The Java Language :: 接口和继承 :: 继承 :: 抽象方法和类 :: 抽象类与接口相比
抽象类用于抽象事物,接口抽象行为
该类定义统一操作,为对象提供方法
比如说生物和人 此时生物可以当做接口,人当做实现生物的抽象类,男人女人作为具体实现类,为什么可以这样设计?因为生物是个非常非常抽象的概念,你很难抽象出它的具体行为(也就是具体的方法实现),此时可以当做接口,人为何可以作为抽象类,因为他可以有具体的行为动作实现,比如,摸爬滚走,但是可能男人女人的性征不一样,同时可能还有一些公有的行为 但是行为特征不一样 这可以当做抽象类的抽象方法,让子类实现。大概是这样。
比如你有好多个类似的对象(想了半天,用别的词不太合适),人也好,东西也好。他们的属性几乎都一样,你就可以把它们抽象成一个类。比如车类,有轮子、发动机、底盘、外壳等属性。new一个对象,来保存当前的属性,可能你要把这些属性保存到数据库,也可能要显示给用户,当前的对象就是起了个保存数据的作用。对象不仅仅能保存数据,还可以有自己的方法,比如发动车。点击某个按钮,调用当前对象的发动的方法。一般类的方法都会和数据的变化有关,我说的是一般,并不是所有。比如数据库连接类,就不会改变数据,只是起到一个连接数据库的作用。
接口一般来说是给外部调用的。你写了一系列的方法,最终能完成一个有用的动作。这一系列的方法最开始的地方就是接口,你可以这么理解。比如一个简单登陆界面,你输入用户名密码之后,点击确定就开始调用后台登录接口,把用户名密码传给服务器,服务器端接收需要一个方法,接收之后要对密码进行验证,又是一个方法。验证之后给客户端返回消息。登录成功或者失败,这一系列动作完成。当然这些你可以压到一个方法里完成,总之开始的地方就是接口。
以上说法比较直白,并不完全准确。
接口表示一个能力/行为。例如:人会跑,狗也会跑,就可以定义接口IRunable。 使用接口很好实现组件间解耦。
抽象类就是为了实现多态,使代码更方便扩展。
接口就好像是100% 纯天然的抽象类。
接口的话更偏向于为一群类定一个协议, 而抽象类的话已经向实现迈进了一步。
例如模板方法模式中就用到了抽象类,实现了一些通用的方法, 而将不同的方法延迟到子类再实现。
举个简单的例子,你现在想要抽象所有国家的人,那么你会想到抽象成一个接口,然后有个方法叫
sayHello
:sayHello
:OK,现在每个实现了这个接口的对象只要实现
sayHello
方法,就表示了各个国家的人,他们拥有了不同的打招呼的的方式。但是现在业务复杂起来了,你需要这些人还具备一些通用的能力,比如
OK,现在每个实现了这个接口的对象只要实现cry
,walk
,那么这个时候,你是不是应该考虑把Human
sayHello
方法,就表示了各个国家的人,他们拥有了不同的打招呼的的方式。cry
,walk
,那么这个时候,你是不是应该考虑把Human
抽象成为一个抽象类,像这样:🎜 rrreee 🎜总结一下,就是如果只有抽象的方法,那么就用接口,如果还有通用的具体方法实现,则用抽象类🎜参考:
Java™ 教程 :: Learngin The Java Language :: 接口和继承 :: 继承 :: 抽象方法和类 :: 抽象类与接口相比
抽象类用于抽象事物,接口抽象行为
该类定义统一操作,为对象提供方法