ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java基础篇抽象类是用来捕捉子类的通用特性的

2020-08-12 05:31:16  阅读:326  来源: 互联网

标签:Java 子类 void 办法 接口 完成 笼统 抽象类


许多常见的面试题都会出比如笼统类和接口有什么差异,什么情况下会运用笼统类和什么情况你会运用接口这样的问题。本文咱们将仔细评论这些话题。

在评论它们之间的不同点之前,咱们先看看笼统类、接口各自的特性。



笼统类
笼统类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。笼统类是被用来创建承继层级里子类的模板。以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,子类,void,办法,接口,完成,笼统,抽象类
来源: https://www.cnblogs.com/hongshunc/p/13488462.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有