博客
关于我
Java----多态+抽象类+抽象方法+接口
阅读量:653 次
发布时间:2019-03-15

本文共 3848 字,大约阅读时间需要 12 分钟。

Java编程日志 Day05:抽象方法与接口的深入理解

时间:2021年2月7日下午 阴

今天,我在学习Java基础内容时,深入研究了抽象方法、抽象类以及接口的概念,并尝试将这些理论知识在代码中进行实际应用。下面是我今天的学习总结。

抽象方法

抽象方法是Java中的一种基本概念,它允许我们在父类中定义一些必须由子类实现的方法。当这些方法在父类中不需要具体的实现代码时,我们可以用抽象方法来表示这些方法的签名,并由子类进行实现。

在Java语法中,抽象方法的定义方式如下:

abstract void 方法名();

抽象方法的特点:

  • 不需要方法体(抽象方法的实现类似于Java接口中的方法)。
  • 必须用abstract关键字修饰。
  • 父类中的抽象方法不能直接调用。

抽象方法的使用场景非常广泛,常见于设计一个框架或基础类并让子类根据具体需求实现其功能。


抽象类

抽象类是与抽象方法密切相关的一个概念。抽象类可以包含抽象方法,但它本身也可以不包含抽象方法。重要的是,一个抽象类的对象无法被实例化,因为它需要被继承,然后由子类实现其抽象方法。

在Java语法中,定义一个抽象类的方式如下:

abstract class 类名 {    // 抽象类的抽象方法或其他代码}

抽象类的特点:

  • 使用abstract修饰类名。
  • 抽象类不能被实例化,必须被继承。
  • 子类必须实现抽象类中的抽象方法才能进行实例化。

例如,一个简单的抽象类的实现:

abstract class Animal {    abstract void sound(); // 定义一个抽象方法}

在这里,Animal是一个抽象类,只有方法签名,没有方法体。任何继承自Animal的类(如DogCat)都必须实现sound()方法。


接口

接口是Java中的另一个重要概念,它实际上是一种特殊的抽象类。接口可以定义一组方法的签名,但这些方法不需要具体的实现代码。接口的主要特点是:

  • 接口中的方法可以是抽象方法(默认带有abstract修饰符)。
  • 接口可以继承其他接口。
  • 接口不需要实现方法的具体代码,可以由具体的实现类进行提供。
  • 在Java中,定义一个接口的语法如下:

    interface 接口名 {    // 接口中的抽象方法}

    接口的作用:

    • 提供一种规范,告诉实现类必须满足的方法接口。
    • 方便多个类之间的通信和交互。
    • 起到类似于 Unrealized Interface 的作用。

    接口的实现方式:

    • implements关键字修饰实现类。
    • 实现类必须实现接口中的所有抽象方法。

    接口的变量默认属性:

    • 接口中的变量默认是public static final

    接口的重要特征:

    • 一个类可以实现多个接口。
    • 接口可以被另一个接口继承。

    例如,以下是一个简单的接口实现:

    interface USB {    String getName(); // get方法    void connect();   // action方法}

    实现类可以是:

    class USBDevice implements USB {    private String type;    public String getType() {        return this.type;    }    public void connect() {        // 实现连接逻辑    }}

    接口的作用与理解

    在编程中,接口起到相当重要的作用。它类似于现实世界中的标准或规范,允许多个不同实现类之间进行协议通信。例如,USB接口就是一个典型的应用场景。

    • USB接口提供了统一的接口规范。
    • 不同厂商(如_HP、阿迪达斯)开发的设备都可以通过同一接口进行连接。
    • 每个设备可以根据接口提供的方法实现自己独特的功能。

    在代码中,类似的概念使得一个大型系统能够支持多种模块或组件协同工作。


    多态

    多态是Java中另一个核心概念,直接关系到OOP(面向对象编程)的灵活性。多态的本质是:在Java运行时,同一个方法可以根据传递的对象类型执行不同的行为。

    多态的实现方式:

    • 允许一个父类的变量引用子类的对象。
    • 在方法执行时,会根据变量实际引用对象的类型,动态选择相应的方法实现。

    多态的实现示例:

    interface Shape {    void draw(); // abstact method}class Circle implements Shape {    @Override    public void draw() {        System.out.println("画一个圆");    }}class Triangle implements Shape {    @Override    public void draw() {        System.out.println("画一个三角形");    }}// main函数public class Main {    public static void main(String[] args) {        Shape shape = new Circle(); // parent reference        shape.draw(); // output: 画一个圆        shape = new Triangle(); // parent reference changes        shape.draw(); // output: 画一个三角形    }}

    在这个例子中:

    • Shape是接口,定义了一个抽象方法draw()
    • CircleTriangleShape的实现类。
    • main()方法中,一个Shape类型的变量可以引用CircleTriangle的对象。
    • 根据变量实际引用对象的类型,方法draw()会调用相应的实现。

    多态的注意事项:

  • 引用子类对象时,可以无需显式转换。
  • 子类对象的方法不能在父类视图中调用。
  • 可使用instanceof操作符检查对象类型。

  • 实际应用:接口的使用

    很多时候,我们需要一种方法,让不同实现类之间能够透透接,彼此之间不必关心对方的具体实现细节。接口的存在,使一个类可以灵活配置各组件,而不必关注每个组件的内部实现细节。

    例如,设计一个音效系统的接口:

    interface SoundEffect {    String getSoundEffect(String source); // 根据输入源生成特定音效。}

    实现类可以是:

    class DogSound implements SoundEffect {    public String getSoundEffect(String input) {        return "ifies the dog's叫声";    }}class CatSound implements SoundEffect {    public String getSoundEffect(String input) {        return "ifies the cat's叫声";    }}// 使用:SoundEffect effect = new DogSound();System.out.println(effect.getSoundEffect("bark")); // 输出:ifies the dog's叫声effect = new CatSound();System.out.println(effect.getSoundEffect("mew")); // 输出:ifies the cat's叫声

    这种方式实现了灵活性和可扩展性,任何符合接口SoundEffect的类都可以轻松地被集成到系统中。


    多态与接口的结合

    多态和接口是Java中两种非常核心的概念,它们共同构成了Java语言的灵活性和可扩展性。在实际开发中,我们经常会将接口和多态结合使用。例如:

    • 一个接口中定义多个抽象方法。
    • 不同实现类根据需要实现接口中的部分或全部抽象方法。
    • 通过多态,各种实现类的对象可以在同一个方法中被统一处理。

    例如,Shape接口定义了多个形状的绘制方式,而不同的形状类可以选择实现适合自己的方法。


    关键点回顾

  • 抽象方法

    • 用于父类中定义必须由子类实现的方法。
    • 不需要具体实现代码,子类需要用abstract方法来实现。
  • 抽象类

    • 用于定义一组抽象方法的类。
    • 不能被实例化,必须被继承并由子类实现抽象方法。
  • 接口

    • 类似于抽象类,但不需要继承关系。
    • 可以被其他接口继承,允许多个实现类协同工作。
    • 主要用于定义标准或协议。
  • 多态

    • 提供一种方法,让同一个方法根据传入对象的类型执行不同的逻辑。
    • 需要一个父类引用对象,调用不同的方法实现。
  • 接口实现

    • 使用implements关键字修饰实现类。
    • 可以实现多个接口,接口之间可以相互独立。
  • 实际应用示例

    • USB接口是接口的典型应用场景。
    • 电子产品可以通过不同的实现类实现接口中的方法,而主板只需要关注接口定义。

  • 通过今天的学习,我对抽象方法、抽象类、接口以及多态有了更加清晰的理解。此外,我还学会了如何将接口与多态结合使用,设计出更灵活的代码结构。这些概念在后续的Java学习中肯定会派上用场。

    转载地址:http://ilbmz.baihongyu.com/

    你可能感兴趣的文章
    Node-RED中Button按钮组件和TextInput文字输入组件的使用
    查看>>
    Node-RED中Switch开关和Dropdown选择组件的使用
    查看>>
    Node-RED中使用html节点爬取HTML网页资料之爬取Node-RED的最新版本
    查看>>
    Node-RED中使用JSON数据建立web网站
    查看>>
    Node-RED中使用json节点解析JSON数据
    查看>>
    Node-RED中使用node-random节点来实现随机数在折线图中显示
    查看>>
    Node-RED中使用node-red-browser-utils节点实现选择Windows操作系统中的文件并实现图片预览
    查看>>
    Node-RED中使用node-red-contrib-image-output节点实现图片预览
    查看>>
    Node-RED中使用node-red-node-ui-iframe节点实现内嵌iframe访问其他网站的效果
    查看>>
    Node-RED中使用Notification元件显示警告讯息框(温度过高提示)
    查看>>
    Node-RED中使用range范围节点实现从一个范围对应至另一个范围
    查看>>
    Node-RED中实现HTML表单提交和获取提交的内容
    查看>>
    Node-RED中将CSV数据写入txt文件并从文件中读取解析数据
    查看>>
    Node-RED中建立TCP服务端和客户端
    查看>>
    Node-RED中建立Websocket客户端连接
    查看>>
    Node-RED中建立静态网页和动态网页内容
    查看>>
    Node-RED中解析高德地图天气api的json数据显示天气仪表盘
    查看>>
    Node-RED中连接Mysql数据库并实现增删改查的操作
    查看>>
    Node-RED中通过node-red-ui-webcam节点实现访问摄像头并截取照片预览
    查看>>
    Node-RED中配置周期性执行、指定时间阶段执行、指定时间执行事件
    查看>>