自学Java如何入门?看完教你秒懂Java接口 抽象类区别!

java中抽象类和接口的区别 https://blog.youkuaiyun.com/ooppookid/article/details/51173179 1、接口和抽象类有什么区别 在Java语言中,抽象类abstract class和接口interface是抽象定义的两种机制。 正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。抽象类abstract class和接口interface在对于抽象定义方面具有很大的相似性,甚... 阅读详情

在面向对象编程中,抽象类和接口是两个经常被用到的语法概念,是面向对象四大特性,以及很多设计模式、设计思想、设计原则编程实现的基础。本文将主要讲解二者的区别

什么是抽象类和接口? 区别在哪里?

不同的编程语言对接口和抽象类的定义方式可能有些差别,但是差别并不大。本文使用 Java 语言。

抽象类

下面我们通过一个例子来看一个典型的抽象类的使用场景。

Logger 是一个记录日志的抽象类,FileLogger 和 MessageQueueLogger 继承Logger,分别实现两种不同的日志记录方式:

  • 记录日志到文件中
  • 记录日志到消息队列中

FileLogger 和 MessageQueuLogger 两个子类复用了父类 Logger 中的name、enabled 以及 minPermittedLevel 属性和 log 方法,但是因为两个子类写日志的方式不同,他们又各自重写了父类中的doLog方法。

父类

import java.util.logging.Level;

/**
 * 抽象父类
 * @author yanliang
 * @date 9/27/2020 5:59 PM
 */
public abstract class Logger {
    private String name;
    private boolean enabled;
    private Level minPermittedLevel;

    public Logger(String name, boolean enabled, Level minPermittedLevel) {
        this.name = name;
        this.enabled = enabled;
        this.minPermittedLevel = minPermittedLevel;
    }

    public void log(Level level, String message) {
        boolean loggable = enabled && (minPermittedLevel.intValue() <= level.intValue());
        if(!loggable) return;
        doLog(level, message);
    }

    protected abstract void doLog(Level level, String message);
}

通过上面的例子,我们来看下抽象类有哪些特性。

  • 抽象类不能被实例化,只能被继承。(new 一个抽象类,会报编译错误)
  • 抽象类可以包含属性和方法。方法既可以包含实现,也可以不包含实现。不包含实现的方法叫做抽象方法
  • 子类继承抽象类,必须实现抽象类中的所有抽象方法。

接口
同样的,下面我们通过一个例子来看下接口的使用场景。

/**
 * 过滤器接口
 * @author yanliang
 * @date 9/28/2020 6:46 PM
 */
public interface Filter {
    void doFilter(RpcRequest req) throws RpcException;
}

/**
 * 接口实现类:鉴权过滤器
 * @author yanliang
 * @date 9/28/2020 6:48 PM
 */
public class AuthencationFilter implements Filter {

    @Override
    public void doFilter(RpcRequest req) throws RpcException {
        // 鉴权逻辑
    }
}

/**
 * 接口实现类:限流过滤器
 * @author yanliang
 * @date 9/28/2020 6:48 PM
 */
public class RateLimitFilter implements Filter{

    @Override
    public void doFilter(RpcRequest req) throws RpcException {
        // 限流逻辑
    }
}

/**
 * 过滤器使用demo
 * @author yanliang
 * @date 9/28/2020 6:48 PM
 */
public class Application {
    // 过滤器列表
    private List<Filter> filters = new ArrayList<>();
    filters.add(new AuthencationFilter());
    filters.add(new RateLimitFilter());

    public void handleRpcRequest(RpcRequest req) {
        try {
            for (Filter filter : filters) {
                filter.doFilter(req);
            }
        } catch (RpcException e) {
            // 处理过滤结果
        }
        // ...
    }
}

上面的案例是一个典型的接口使用场景。通过Java中的 interface 关键字定义了一个Filter 接口,AuthencationFilter 和 RetaLimitFilter 是接口的两个实现类,分别实现了对Rpc请求的鉴权和限流的过滤功能。

下面我们来看下接口的特性:

  • 接口不能包含属性(也就是成员变量)
  • 接口只能生命方法,方法不能包含代码实现
  • 类实现接口时,必须实现接口中生命的所有方法。
    综上,从语法上对比,这两者有比较大的区别,比如抽象类中可以定义属性、方法的实现,而接口中不能定义属性,方法也不能包含实现等。

除了语法特性的不同外,从设计的角度,这两者也有较大区别。抽象类本质上就是类,只不过是一种特殊的类,这种类不能被实例化,只能被子类继承。属于is-a的关系。接口则是 has-a 的关系,表示具有某些功能。对于接口,有一个更形象的叫法:协议(contract)

抽象类和接口解决了什么问题?

下面我们先来思考一个问题~

抽象类的存在意义是为了解决代码复用的问题(多个子类可以继承抽象类中定义的属性哈方法,避免在子类中,重复编写相同的代码)。

那么,既然继承本身就能达到代码复用的目的,而且继承也不一定非要求是抽象类。我们不适用抽象类,貌似也可以实现继承和复用。从这个角度上讲,我们好像并不需要抽象类这种语法呀。那抽象类除了解决代码复用的问题,还有其他存在的意义吗?
这里大家可以先思考一下哈~

我们还是借用上面Logger的例子,首先对上面的案例实现做一些改造。在改造之后的实现中,Logger不再是抽象类,只是一个普通的父类,删除了Logger中的两个方法,新增了 isLoggable()方法。FileLogger 和 MessageQueueLogger 还是继承Logger父类已达到代码复用的目的。具体代码如下:

/**
 * 父类:非抽象类,就是普通的类
 * @author yanliang
 * @date 9/27/2020 5:59 PM
 */
public class Logger {
    private String name;
    private boolean enabled;
    private Level minPermittedLevel;

    public Logger(String name, boolean enabled, Level minPermittedLevel) {
        this.name = name;
        this.enabled = enabled;
        this.minPermittedLevel = minPermittedLevel;
    }

    public boolean isLoggable(Level level) {
        return enabled && (minPermittedLevel.intValue() <= level.intValue());
    }

}

/**
 * 抽象类Logger的子类:输出日志到文件中
 * @author yanliang
 * @date 9/28/2020 4:44 PM
 */
public class FileLogger extends Logger {

    private Writer fileWriter;

    public FileLogger(String name, boolean enabled, Level minPermittedLevel, String filePath) throws IOException {
        super(name, enabled, minPermittedLevel);
        this.fileWriter = new FileWriter(filePath);
    }

    protected void log(Level level, String message) {
        if (!isLoggable(level)) return ;
        // 格式化level 和 message,输出到日志文件
        fileWriter.write(...);
    }
}

package com.yanliang.note.java.abstract_demo;

import java.util.logging.Level;

/**
 * 抽象类Logger的子类:输出日志到消息队列中
 * @author yanliang
 * @date 9/28/2020 6:39 PM
 */
public class MessageQueueLogger extends Logger {

    private MessageQueueClient messageQueueClient;

    public MessageQueueLogger(String name, boolean enabled, Level minPermittedLevel, MessageQueueClient messageQueueClient) {
        super(name, enabled, minPermittedLevel);
        this.messageQueueClient = messageQueueClient;
    }

    protected void log(Level level, String message) {
        if (!isLoggable(level)) return ;
        // 格式化level 和 message,输出到消息队列中
        messageQueueClient.send(...)
    }
}

以上实现虽然达到了代码复用的目的(复用了父类中的属性),但是却无法使用多态的特性了。

像下面这样编写代码就会出现编译错误,因为Logger中并没有定义log()方法。

Logger logger = new FileLogger("access-log", true, Level.WARN, "/user/log");
logger.log(Level.ERROR, "This is a test log message.");

如果我们在父类中,定义一个空的log()方法,让子类重写父类的log()方法,实现自己的记录日志逻辑。使用这种方式是否能够解决上面的问题呢? 大家可以先思考下~

这个思路可以用使用,但是并不优雅,主要有一下几点原因:

  • 在Logger中定义一个空的方法,会影响代码的可读性。如果不熟悉Logger背后的设计思想,又没有代码注释的话,在阅读Logger代码时就会感到疑惑(为什么这里会存在一个空的log()方法)
  • 当创建一个新的子类继承Logger父类时,有时可能会忘记重新实现log方法。之前是基于抽象类的设计思想,编译器会强制要求子类重写父类的log方法,否则就会报编译错误。
  • Logger可以被实例化,这也就意味着这个空的log方法有可能会被调用。这就增加了类被误用的风险。当然,这个问题 可以通过设置私有的构造函数的方式来解决,但是不如抽象类优雅。

抽象类更多是为了代码复用,而接口更侧重于解耦。接口是对行为的一种抽象,相当于一组协议或者契约(可类比API接口)。调用者只需要关心抽象的接口,不需要了解具体的实现,具体的实现代码对调用者透明。接口实现了约定和实现相分离,可以降低代码间的耦合,提高代码的可扩展性。

实际上,接口是一个比抽象类应用更加广泛、更加重要的知识点。比如,我们经常提到的 ”基于接口而非实现编程“ ,就是一条几乎天天会用到的,并且能极大的提高代码的灵活性、扩展性的设计思想。

如何模拟抽象类和接口

在前面列举的例子中,我们使用Java的接口实现了Filter过滤器。不过,在 C++ 中只提供了抽象类,并没有提供接口,那从代码的角度上说,是不是就无法实现 Filter 的设计思路了呢? 大家可以先思考下 🤔 ~

我们先会议下接口的定义:接口中没有成员变量,只有方法声明,没有方法实现,实现接口的类必须实现接口中的所有方法。主要满足以上几点从设计的角度上来说,我们就可以把他叫做接口。

实际上,要满足接口的这些特性并不难。下面我们来看下实现:

class Strategy {
  public: 
    -Strategy();
    virtual void algorithm()=0;
  protected:
    Strategy();
}

抽象类 Strategy 没有定义任何属性,并且所有的方法都声明为 virtual 类型(等同于Java中的abstract关键字),这样,所有的方法都不能有代码实现,并且所有继承了这个抽象类的子类,都要实现这些方法。从语法特性上看,这个抽象类就相当于一个接口。

处理用抽象类来模拟接口外,我们还可以用普通类来模拟接口。具体的Java实现如下所示:

public class MockInterface {
  protected MockInteface();
  public void funcA() {
    throw new MethodUnSupportedException();
  }
}

我们知道类中的方法必须包含实现,这个不符合接口的定义。但是,我们可以让类中的方法抛出 MethodUnSupportedException 异常,来模拟不包含实现的接口,并且强迫子类来继承这个父类的时候,都主动实现父类的方法,否则就会在运行时抛出异常。

那又如何避免这个类被实例化呢? 实际上很简单,我们只需要将这个类的构造函数声明为 protected 访问权限就可以了。

如何决定该用抽象还是接口?

上面的讲解可能偏理论,现在我们就从真实项目开发的角度来看下。在代码设计/编程时,什么时候该用接口?什么时候该用抽象类?

实际上,判断的标准很简单。如果我们需要一种is-a关系,并且是为了解决代码复用的问题,就用抽象类。如果我们需要的是一种has-a关系,并且是为了解决抽象而非代码复用问题,我们就用接口。
从类的继承层次来看,抽象类是一种自下而上的设计思路,先有子类的代码复用,然后再抽象成上层的父类(也就是抽象类)。而接口则相反,它是一种自上而下的设计思路,我们在编程的时候,一般都是先设计接口,再去思考具体实现。

好了,你是否掌握了上面的内容呢。你可以通过一下几个维度来回顾自检一下:

  • 抽象类和接口的语法特性
  • 抽象类和接口存在的意义
  • 抽象类和接口的应用场景有哪些
    以上就是Java 接口和抽象类的区别的详细内容,更多关于Java 接口和抽象类的资料请关注我的优快云哦!
Unity URP风格化水面Shader全流程实现与性能优化指南 在游戏开发中,Shader是实现特定视觉风格的核心技术,它通过编写在GPU上运行的程序,控制模型每个像素的最终颜色与光照表现。其原理在于对顶点位置、纹理坐标、光照信息及深度等数据进行一系列数学运算与插值。这项技术的价值在于能够以极高的自由度创造从写实到卡通的各种渲染效果,同时通过算法优化实现对硬件资源的精准控制。在移动游戏、独立游戏等对性能与风格化有强烈需求的场景中,自定义Shader尤为重要。本文聚焦于使用Unity URP渲染管线,从零构建一个高效的风格化水面Shader,详细拆解了深度色、波浪动画、边 阅读详情

相关推荐

我用 AI 做了个开源地图工具:从 OpenStreetMap 一键获取全国 AOI/POI 数据

本文介绍了一款免费开源的OSM数据查询与可视化工具,旨在解决Overpass QL语法晦涩、数据获取门槛高的问题。工具支持面数据(AOI)、点数据(POI)及路网三种查询模式,内置30+常用模板实现一键检索。具备高德与OSM双底图切换、坐标自动转换功能,支持GeoJSON、SHP、CSV多格式导出,同时保留自定义查询能力。作为纯HTML单文件应用,可零成本部署至GitHub Pages在线使用。该工具有效降低了地理数据获取难度,是替代商业地图API、高效提取全球开源地理信息的实用利器。

weixin_45812624的博客 591

2026年Java面试题最新整理,附白话答案

2026年Java开发面试题最新整理总结,本篇2026年Java面试题是我在北京地区进行面试整理得出,面试时常问的基本都在下面了。基本都是可以直接白话回答的,面试时照此回答即可,有其他常见面试问题也欢迎在评论区补充。

无枫的博客,分享Java及Vue方向的技术文章 10万+

香橙派5使用RK3588S内置NPU加速yolov5推理,实时识别数字达到50fps

香橙派5采用了RK3588S,内置的NPU达到了6Tops的算力,博主这里记录一下自己的踩坑过程,好不容易做出来的不能以后忘记了(手动狗头)。这里博主还在B站上发布了效果视频,大家感兴趣的话可以看一下。其中解决了先验框标注位置不对,或者出现非常多的框的问题

weixin_51651698的博客 2万+

Java 抽象类和普通类、接口的区别——看完你就顿悟了

Java 抽象类和普通类、接口的区别——看完你就顿悟了 标签: java抽象类概念理解抽象类与接口区别抽象类与普通类区别 2017-05-04 16:26 1029人阅读 评论(0) 收藏 举报  分类: Java(17)  版权声明:本文为博主csdn_aiyang原创文章,未经博主允许不得转载。 目录(?)[+] 概

u012092924的博客 3万+

FPGA SPI驱动ADC避坑指南:以ADC128S022为例,详解时序设计与代码调试

本文以ADC128S022为例,详细解析FPGA通过SPI驱动ADC的时序设计与代码调试中的常见问题。从时钟分频计算、SPI模式选择到状态机实现,提供避坑指南和实战技巧,帮助工程师解决数据采集系统中的时序匹配难题。特别针对FPGA与ADC通信中的微妙差异,给出精确的Verilog代码示例和ModelSim仿真验证方法。

weixin_42522374的博客 461

英飞凌TC3xx的GTM模块到底有多强?从PWM生成到电机驱动,一篇讲透车载定时器核心

本文深入解析英飞凌TC3xx系列中的GTM模块在汽车电子领域的强大功能,从PWM生成到电机驱动的全链路设计。通过模块化架构和硬件级解决方案,GTM显著提升系统精度和响应速度,适用于电机控制、电源管理等复杂场景。文章结合实战经验,详细拆解GTM的技术实现和性能优势。

weixin_27741699的博客 204

JAVA抽象类与接口的区别,看完这篇你就悟了

一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。5、接口是抽象类的延伸,在 Java 8 之前,它可以看成是一个完全抽象的类,也就是说它不能有任何的方法实现。1、在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。3、除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

针线犹存未忍开 2024

Spring Boot Swagger未授权访问漏洞:原理、风险与修复方案详解

在微服务架构中,API文档管理是开发与运维的重要环节。Swagger作为RESTful API文档生成与调试的标准化工具,通过OpenAPI规范自动生成交互式接口文档,极大提升了开发效率。然而,其默认配置往往缺乏访问控制,导致文档端点直接暴露,形成未授权访问漏洞。从技术原理看,该漏洞源于Spring Boot等框架集成Swagger时,相关端点未纳入安全框架的拦截范围,攻击者可通过扫描常见路径获取完整的接口定义与数据结构。这不仅会造成敏感信息泄露,更可能成为越权操作、数据篡改等深度攻击的入口点。在工程实践中

weixin_42524171的博客 502

java中接口和抽象类的区别

金三银四马上就到了,希望大家能好好学习一下这些技术点学习视频:《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!面试真题:[外链图片转存中…(img-y4cDQOKR-1711982952870)]《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

WJud11的博客 672

duilib入门基础一 容器之 BOX、VBOX、HBOX布局及其子控件align排列方式

序 容器 duilib有以下主要布局容器 Box(自由布局容器) VBox(垂直布局容器) HBox(水平布局容器) TabBox(多标签布局容器) TileBox(格子布局容器) ChildBox(子布局容器) ScrollableBox(可滚动容器) 一、Box容器布局 Box容器及其扩展VBox HBox是其中最常用的容器。 相对Box来说,HBox, VBox更好理解些 1.1 VBox HBox VBox下的各个控件垂...

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 3083

YOLO11-Seg优化:卷积变体系列篇 | 动态蛇形卷积(Dynamic Snake Convolution) | ICCV2023

动态蛇形卷积(Dynamic Snake Convolution),增强微小特征提取能力,引入到YOLO11-Seg,与C3k2结合实现二次创新

会AI的学姐 373

秒懂:抽象类、抽象方法、接口

抽象类可以没有抽象方法,有抽象方法的类必须是抽象类。 抽象类不能再实例化,即不能直接构造一个该类的对象。 修饰符:abstract abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果子类没有 实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。 ==================...

命z的博客 943

基于 MATLAB 的 FastICA 算法实现语音信号盲分离

FastICA 算法通过最大化信号的非高斯性,找到独立成分,从而实现信号的分离。这些混合的信号被称为盲源信号,我们希望通过分析混合信号,将它们分离出来以便进行进一步的处理和分析。FastICA 是一种常用的盲源信号分离算法,它基于统计学原理,通过寻找独立成分来实现信号的分离。FastICA(独立成分分析)是一种常用的盲源信号分离算法,在语音和图像处理领域都有广泛的应用。本文将介绍如何使用 MATLAB 实现 FastICA 算法来实现语音信号的盲分离,并提供相应的源代码。FastICA 算法原理。

学习使你进步。 2025

java接口与抽象类区别

很久没有看到如此精辟的文章了!作者写得实在太好了!正在学JAVA或者想了解抽象类与接口的朋友,绝对不可错过!本人极力推荐! OOP中接口与抽象类的区别 Java语言接口与继承的本质 深入理解接口和抽象类   OOP中接口与抽象类的区别 OOP中的INTERFACE和ABSTRACT CLASS是两个不同的概念 我们在使用的时候往往将两个混在一起使用,不做什么区别,大家可能在定义上对

2644

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java中抽象类跟接口的区别

Java中抽象类和接口的区别 抽象类: 含有abstract修饰符的class 即为抽象类, abstract类不能创建实例对象, 含有abstract的方法的类必须定义为abstract class , abstract class 里的方法不必是抽象的, 抽象来中定义抽象方法必须放在具体子类中实现,所以,不能有抽象的构造方法或抽象的静态方法,如果子类没有实现抽象父类中的所有方法,那

Super的专栏 1210

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java总结:抽象类、接口以及抽象类和接口的区别

Java中抽象类和接口的区别会是很多公司的必问面试题之一,我们必须牢牢掌握。

鄙人kunzhi96,感恩遇见! 864

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java抽象类和接口的区别

Java抽象类和接口可以说是面试求职的热点问题,几乎每场面试都会聊到这个问题。 一、抽象类 理解抽象类之前,我们先温习下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为: abstract void fun(); 我觉得含有抽象方法的类定义为抽象类比较合适,当然你可以说抽象类可以没有方法来推翻我的定义,不过这个类都没有方法了,那么还有什么意义呢? 抽...

不一样的博客 710

java接口和抽象类的区别

Java基础之接口与抽象类的区别 1、基本语法区别 Java中接口和抽象类的定义语法分别为interface与abstract关键字。 抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点: a、抽象类不能被实例化只能被继承; b、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法; c、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public; d、一个子类继承一

tms192407的博客 1518

什么是Java接口 、抽象类 以及它们的区别

深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 一.抽象类 在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为: abstra

BBG_Clown的博客 520

Java的接口和抽象类区别

一、抽象类 在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为: abstract void fun(); 抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。 下面要注意一个问题:在《J...

孤独没有颜色 169

老司机教你Java抽象类和接口的区别

Java也写了10年多了,先说说个人的感悟吧,想看面试答案直接翻到本文结尾。 个人感悟 ​ Java语言本身有许多借鉴C++优点,同时克服C++复杂性的地方,例如接口的发明。C++里面是没有接口的,但是可以定义抽象类,然后支持多重继承。关于多重继承的弊端,可以自行搜索。Gosling为了克服多重继承的弊端,直接限制了Java只能是单根继承,即一个类只能继承一个父类。像这种只有方法没有属性的抽象类,一个类可以支持多个不会有影响,因此单独为它设计一个接口的语法。反观C++、Python这种具有多重继

福来哥的博客 322

Java中抽象类、接口以及他们的区别

我们在说抽象类和接口的区别之前,我们先说一下什么是抽象类以及什么是接口。 什么是抽象类 在多态中,父类被重写方法的方法体是多余的,所以我们舍去父类方法的方法体之后就形成了抽象方法;因为该类中拥有抽象方法,所以该类必须为抽象类。 我们用abstract来修饰抽象方法以及抽象类,例如下面就是包含一个抽象方法的抽象类。 public abstract class Person{ public abst...

S_Tian的博客 302

java接口与抽象类的区别

1、基本语法区别 Java中接口和抽象类的定义语法分别为interface与abstract关键字。 抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点: a、抽象类不能被实例化只能被继承; b、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法; c、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public; d、一个子类继承一个抽象类,则子类必须实现父类抽象方

weixin_45394002的博客 444

Java抽象类与接口的区别

** Java抽象类与接口的区别 ** 抽象类 抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。以JDK中的GenericServlet为例: public abstract class GenericServlet implements Servlet, ServletConfig, Serializable { // abstr...

weixin_43287508的博客 231
上一篇: 我跟女朋友说:“三分钟带你秒懂Java泛型!”女朋友直呼:“太快了!”
下一篇: 面试被问设计模式,Java老司机教你怎么应对?看完给我狠怼面试官!!!
Danny_java
博客等级 码龄5年 9粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值