首页 > 编程语言 >Java抽象类与接口的区别(略解)

Java抽象类与接口的区别(略解)

时间:2023-10-07 09:46:53浏览次数:35  
标签:Java 实现 子类 接口 略解 抽象类 方法 public

  • 抽象类 
  • 接口
  • 抽象类与接口区别

1.抽象类

  抽象类用abstract来修饰,例如:

package com.test.abstractaaa;

public abstract class TestAbstract {
    
}

抽象类是用来捕捉子类的通用性的,它不能被实例化,只能用作子类的超类,抽象类是被用来创建继承层级里子类的模板,例如JDK中的GenericServlet类中部分代码:

复制代码
public abstract class GenericServlet  implements Servlet, ServletConfig, java.io.Serializable{
public void init(ServletConfig config) throws ServletException {   this.config = config;   this.init(); } public void init() throws ServletException {} public abstract void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
   public void destroy() {} }
复制代码

当HttpServlet继承GenericServlet时,HttpServlet实现了GenericServlet类中的service方法

复制代码
public abstract class HttpServlet extends GenericServlet
{
    protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException
    {
      //... } }
复制代码

2.接口

接口是抽象方法的集合,如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法,就像契约模式,如果实现了这个接口,那么就必须保证使用这些方法,并且实现这些方法,接口是一种形式,接口自身不能做任何事情,接口里面的方法默认都是abstract的,以Externalizable接口为例:

复制代码
public interface Externalizable extends java.io.Serializable {
    
    void writeExternal(ObjectOutput out) throws IOException;

    void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
}
复制代码

当实现这个接口时,就要实现它里面的两个方法:

复制代码
public class ExteImpl implements Externalizable {

    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
        // TODO Auto-generated method stub

    }

    @Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
        // TODO Auto-generated method stub

    }

}
复制代码

2.抽象类和接口的比较

参数 抽象类 接口
默认的方法实现 可以有默认的方法实现 完全抽象,根本不存在方法的实现
实现方式

子类用extends关键字来继承抽象类,如果子类

不是抽象类的话,它需要实现父级抽象类中所有抽

象方法,父类中非抽象方法可重写也可不重写

子类用implements去实现接口,需要实现接口中所有方法
构造器 抽象类可以有构造器(构造器不能用abstract修饰) 接口不能有构造器
与正常Java类的区别 正常Java类可被实例化,抽象类不能被实例化,其他区别见上下文 接口和正常java类是不同的类型
访问修饰符  抽象方法可以用public、protected、default修饰 接口默认是public、不能用别的修饰符去修饰
main方法 抽象类中可以有main方法,可以运行它 接口中不能有main方法,因此不能运行它
多继承 抽象类可继承一个类和实现多个接口 接口只能继承一个或者多个接口
速度 抽象类比接口速度快 接口稍微慢点,因为它需要去寻找类中实现的它的方法
添加新方法 如果在抽象类中添加新非abstract的方法,可以直接添加,因为非abstract方法无需在子类中实现,如果是abstact方法,则需要改变子类的代码,也要实现这个方法 只要在接口中添加方法,实现它的类就要改变,去实现这个新添加的方法

 

 2.1 设计层面上的区别

  a. 抽象类是对一种事务的抽象,是对整个类进行抽象,包括属性,行为(方法)。接口是对行为(行为)的抽象。如果一个类继承或实现了某个抽象类,那么一定是抽象类的种类(拥有同一种属性或行为的类)。

  b. 设计层面不同,抽象类作为很多子类的父类,是一种模板设计,而接口是一种规范,它是一种辐射式设计,也就是说对于抽象类,如果需要添加新的方法,可以直接在抽象方法中添加实现,子类可以不用变更,

   而对于接口不行,如果接口进行了变更,那么实现它的类都需要做变更。

2.2 接口和抽象类分别在什么时候使用

  a. 如果拥有一些方法,并想让他们中的一些有默认的具体实现,请选择抽象类

  b. 如果想实现多重继承,那么请使用接口,由于java不支持多继承,子类不能继承多个类,但一个类可以实现多个接口,因此可以使用接口来解决。

  c. 如果基本功能在不断变化,那么就使用抽象类,如果使用接口,那么每次变更都需要相应的去改变实现该接口的所有类。

2.3 JDK8 中接口的默认方法和静态方法

  JDK8中,Oracle引入默认方法和静态方法,用来减少抽象类和接口的差异,可以在接口中提供默认的实现方法并实现该接口的类不用强制去实现这个方法。JDK8中接口的静态方法只能通过接口名直接去调用,接口中的默认方法因为不是abstract的,所以可重写,也可以不重写。

标签:Java,实现,子类,接口,略解,抽象类,方法,public
From: https://www.cnblogs.com/Aspood/p/17745550.html

相关文章

  • HTTP协议(略解)
    HTTP(HyperTextTransferProtocol)协议是构建互联网应用最重要的网络协议,其主要特点包括:1.基于客户端/服务器模式,客户端通过HTTP请求向服务器请求数据。2.HTTP是无状态的,无连接协议,每次请求都会建立新的连接。3.HTTP协议基于TCP/IP协议,默认端口号为80。4.HTTP使用U......
  • SpringMVC略解
    SpringMVC是Spring框架的重要模块,是基于Java实现的轻量级WebMVC框架。其主要设计原理和实现如下:1.基于MVC架构,将请求分发到不同的组件处理。2.通过DispatcherServlet作为前端控制器,映射请求并处理响应。3.支持注解配置Controller、绑定参数等,减少配置。4.通过Hand......
  • 深入浅出 Java 中的神锁:ReentrantLock,还有谁不会?
    来源:jiannan.blog.csdn.net/article/details/121331360一、引言话不多说,扶我起来,我还可以继续撸。在学习ReentrantLock源码之前,先来回顾一下链表、队列数据结构的基本概念~~二、数据结构2.1链表(LinkedList)小学一、二年级的时候,学校组织户外活动,老师们一般都要求同学之间小......
  • 深入理解Java的接口与抽象类
    深入理解Java的接口和抽象类对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java......
  • TCP/IP协议特点略解
    TCP/IP协议是互联网的基础通信协议,其特点是:1.采用分层的网络通信协议;2.在网络层实现无连接的IP协议;3.在传输层实现面向连接的TCP协议和无连接的UDP协议;4.应用层根据应用需求选择TCP或UDP作为运输协议;5.通过IP地址实现主机间通信;6.TCP/IP协议簇为互联网......
  • JavaScript 技术
    JavaScript是一种脚本语言,主要用于在Web页面中实现交互效果和动态功能。它是一种客户端脚本语言,意味着它在用户的浏览器中运行,而不是在服务器上。JavaScript具有以下特点和技术:1.事件驱动:JavaScript可以通过监听用户的交互事件(如点击、鼠标移动、键盘输入等)来触发相应的动作和......
  • JavaScript(二)——DOM
    WebAPIs一个页面就是一个文档(document),标签是元素(element),内容是节点(node),DOM中把以上内容都看作对象。DOM文档对象模型获取DOM元素document.querySelector('')//返回匹配到的第一个元素.box、#id、div一个或多个选择器document.querySelectorAll('')//匹配到符合的元素集(伪......
  • 基于注解的装配、以及纯Java配置(不用xml)
    1、基于注解的装配参考课本以及陈恒spring教材很好理解,还参考了https://blog.csdn.net/huweiliyi/article/details/107641886(偏向代码分析)https://www.bilibili.com/video/BV1tM4y1Y7Jf/?spm_id_from=333.337.search-card.all.click&vd_source=af888e4b9fbc70c4d5e7a445796ae8a1(......
  • JavaSE核心(5)
    四:面向对象   一、简介      1.概念:面向对象也即OOP(ObjectOrientedProgramming),是一种编程思想,它以对象作为基本的单元来构建系统,具有三大特征和五大原则。      2.三大特征:          1.封装:隐藏对象的属性和实现细节,仅对外提供公共访问方......
  • JavaSE核心(6)
    五:常用类   一、Number&Math类:包含了数据类型转换和用于执行基本数学运算的属性和方法。      1.常用方法           ......