这是2019年的第一篇博客,开始复习整理一下javase的知识点(其实差不多是预习了,参照网上大佬的博客搬运了示例代码qaq),写的比较简陋见笑了。。
首先分别概括一下什么是接口和抽象类。
接口:简单说就是一系列抽象方法的集合,如果一个类实现(implements)了某个接口,即继承了这个接口的所有抽象方法,则该类必须实现这些抽象方法。
demo
//接口externalizable public interface externalizable extends serializable { void writeexternal(objectoutput out) throws ioexception; void readexternal(objectinput in) throws ioexception, classnotfoundexception; } //实现externalizable接口的employee类 public class employee implements externalizable { int employeeid; string employeename; @override public void readexternal(objectinput in) throws ioexception, classnotfoundexception { employeeid = in.readint(); employeename = (string) in.readobject(); } @override public void writeexternal(objectoutput out) throws ioexception { out.writeint(employeeid); out.writeobject(employeename); } }
抽象类:首先,与接口不同的是,抽象类不能直接创建实例对象,抽象类中的抽象方法只能在其子类中实现(即通过extends的方式而不是implements),因此可以把抽象类看作是提供给继承的子类的一个模板。抽象类本身没有任何用处,它是为了继承而存在的,创建一个抽象类而不去继承它等于是做了无用功。
demo
//实现...接口的抽象类genericservlet public abstract class genericservlet implements servlet, servletconfig, serializable { // abstract method abstract void service(servletrequest req, servletresponse res); void init() { // its implementation } // other method related to servlet } //继承genericservlet抽象类的httpservlet子类 public class httpservlet extends genericservlet { void service(servletrequest req, servletresponse res) { // implementation } protected void doget(httpservletrequest req, httpservletresponse resp) { // implementation } protected void dopost(httpservletrequest req, httpservletresponse resp) { // implementation } // some other methods related to httpservlet }
两者对比
参数 | 接口 | 抽象类 |
---|---|---|
构造方法 | 不能有 | 可以有 |
方法 | 只能有抽象方法 | 可以包含普通方法 |
继承 | 一个类可实现多个接口 | 只能继承一个抽象类 |
成员变量 | 只能是public static final类型 | 可以是各种类型 |
接口和抽象类分别适用于何种场合?这里搬运网上某大佬博客里的一个例子。
门和警报的例子:门都有open( )和close( )两个动作,此时我们可以定义通过抽象类和接口来定义这个抽象概念:
//抽象类 abstract class door { public abstract void open(); public abstract void close(); } //接口 interface door { public abstract void open(); public abstract void close(); }
现在需要部分门具有报警alarm( )的功能,该如何实现?
interface alram { void alarm(); } abstract class door { void open(); void close(); } class alarmdoor extends door implements alarm { void oepn() { //.... } void close() { //.... } void alarm() { //.... } }
参考:
如对本文有疑问, 点击进行留言回复!!
springcloud中feign调用处理mybatis-plus Ipage反序列化问题。
Flume 史上最全面的大数据学习第十篇(一) 别再说不知道flume是什么了
网友评论