Java基础篇抽象类是用来捕捉子类的通用特性的
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java基础篇抽象类是用来捕捉子类的通用特性的,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3622字,纯文字阅读大概需要6分钟。
内容图文
许多常见的面试题都会出比如笼统类和接口有什么差异,什么情况下会运用笼统类和什么情况你会运用接口这样的问题。本文咱们将仔细评论这些话题。
在评论它们之间的不同点之前,咱们先看看笼统类、接口各自的特性。
笼统类
笼统类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。笼统类是被用来创建承继层级里子类的模板。以JDK中的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
}
当HttpServlet类承继GenericServlet时,它供给了service办法的完成:
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
}
接口
接口是笼统办法的调集。假如一个类完成了某个接口,那么它就承继了这个接口的笼统办法。这就像契约形式,假如完成了这个接口,那么就必须确保运用这些办法。接口仅仅一种形式,接口本身不能做任何事情。以Externalizable接口为例:
public interface Externalizable extends Serializable {
void writeExternal(ObjectOutput out) throws IOException;
void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
}
当你完成这个接口时,你就需求完成上面的两个办法:
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来完成接口。它需求供给接口中一切声明的办法的完成
构造器 笼统类能够有构造器 接口不能有构造器
与正常Java类的差异 除了你不能实例化笼统类之外,它和一般Java类没有任何差异 接口是完全不同的类型
访问修饰符 笼统办法能够有public、protected和default这些修饰符 接口办法默许修饰符是public。你不能够运用其它修饰符。
main办法 笼统办法能够有main办法而且咱们能够运转它 接口没有main办法,因此咱们不能运转它。
多承继 笼统办法能够承继一个类和完成多个接口 接口只能够承继一个或多个其它接口
速度 它比接口速度要快 接口是略微有点慢的,因为它需求时刻去寻觅在类中完成的办法。
添加新办法 假如你往笼统类中添加新的办法,你能够给它供给默许的完成。因此你不需求改动你现在的代码。 假如你往接口中添加办法,那么你必须改动完成该接口的类。
什么时候运用笼统类和接口
假如你具有一些办法而且想让它们中的一些有默许完成,那么运用笼统类吧。
假如你想完成多重承继,那么你必须运用接口。因为Java不支持多承继,子类不能够承继多个类,但能够完成多个接口。因此你就能够运用接口来解决它。
假如基本功能在不断改动,那么就需求运用笼统类。假如不断改动基本功能而且运用接口,那么就需求改动一切完成了该接口的类。
https://www.jianshu.com/p/b96205b195f8
https://www.jianshu.com/p/8f0290f51505
https://www.jianshu.com/p/c9d56eb1cdc4
https://www.jianshu.com/p/44f5d7d68779
Java8中的默许办法和静态办法
Oracle已经开端尝试向接口中引入默许办法和静态办法,以此来减少笼统类和接口之间的差异。现在,咱们能够为接口供给默许完成的办法了而且不必强制子类来完成它。这类内容我将会在今后的文章中进行阐述。
内容总结
以上是互联网集市为您收集整理的Java基础篇抽象类是用来捕捉子类的通用特性的全部内容,希望文章能够帮你解决Java基础篇抽象类是用来捕捉子类的通用特性的所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。