许多常见的问题包括抽象类和接口的区别、在什么情况下使用抽象类以及在什么情况下使用接口。 本文将详细介绍这些主题。
在讨论它们的差异之前,让我们先来看看抽象类、接口各自的特性。
抽象类
抽象类用于捕捉子类的一般特性。 无法实例化,只能作为子类的超类使用。 抽象类是用于创建继承层次结构中的子类的模板。 以JDK的通用servlet为例。
publicabstractclassgenericservletimplementsservlet,ServletConfig,Serializable {
//abstract方法
abstractvoidservice (服务器请求响应);
void init ()。
//its实施
}
//othermethodrelatedto servlet
}
http servlet类在继承通用servlet时实现了以下servlet方法:
publicclasshttpservletextendsgeneric servlet {
服务(服务器请求,服务器响应)。
//实施
}
protectedvoiddoget (http服务器请求,http服务器响应) {
//实施
}
protectedvoiddopost (http服务器请求响应,http服务器响应响应) {
//实施
}
//someothermethodsrelatedtohttp servlet
}
接口
接口是抽象方法的集合。 如果实现了具有类的接口,则继承该接口的抽象方法。 这就像合同模型,要实现这个接口,必须切实使用这些方法。 接口只是一种形式,接口本身什么也做不了。 以可扩展接口为例。
publicinterfaceexternalizableextendsserializable {
建筑物外部(对象输出) throws io执行;
voidreadexternal (对象信息表达) throws io表达,分类;
}
结实的蚂蚁要实现这种界面,就需要实现以上两种方法。
publicclassemployeeimplementsexternalizable {
英特尔员工id;
字符串员工名称;
@Override
公共建筑外部(对象信息技术,类别)。
employeeId=in.readInt (;
员工名称=(字符串) in .读对象);
}
@Override
公共出口外部(对象输出) throws io执行{ }。
写入int (雇员id;
out.writeobject (员工名称;
}
}
比较抽象类和接口
何时使用抽象类和接口
如果您有多种方法,并且想让其中一些实现缺省实现,那么就使用抽象类吧。 如果想实现多重继承,就必须使用接口。 由于Java不支持多个继承,所以子类不能继承多个类,但可以实现多个接口。 可以使用接口解决。 如果基本功能不断变化,则必须使用抽象类。 如果要不断更改基本功能并使用接口,则必须更改实现该接口的所有类。
Java8缺省方法和静态方法
Oracle试图在接口中引入缺省方法和静态方法,以减少抽象类和接口之间的差异。 现在,您可以为接口提供缺省实现方法,而不需要强制子类实现。 关于这样的内容,将在今后的文章中叙述。
来源: https://dwz.cn/0MUS3wxk作者: Java团长