2.3. 接口与抽象类

这篇具有很好参考价值的文章主要介绍了2.3. 接口与抽象类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

接口和抽象类是 Java 中两种实现抽象和多态的方法。它们之间有一些区别,但也有一些相似之处。这一节我们将通过详细的例子来更深入地了解接口和抽象类。

2.3.1. 接口

接口可以定义一组方法签名,但不能包含方法的实现。一个类可以实现多个接口,实现接口的类必须实现接口中定义的所有方法。

定义接口:

interface InterfaceName {
    ReturnType methodName(Parameters);
}

实现接口:

class ClassName implements InterfaceName {
    // 实现接口中的所有方法
}

示例1:接口

interface Drawable {
    void draw();
}

class Circle implements Drawable {
    double radius;

    @Override
    public void draw() {
        System.out.println("Drawing a circle with radius " + radius);
    }
}

class Square implements Drawable {
    double sideLength;

    @Override
    public void draw() {
        System.out.println("Drawing a square with side length " + sideLength);
    }
}

class Main {
    public static void main(String[] args) {
        Circle circle = new Circle();
        circle.radius = 5;
        circle.draw(); // 实现接口的方法

        Square square = new Square();
        square.sideLength = 4;
        square.draw(); // 实现接口的方法
    }
}

接口还可以具有默认方法和静态方法,这些方法可以包含实现。

interface InterfaceName {
    default ReturnType defaultMethodName(Parameters) {
        // 默认方法的实现
    }

    static ReturnType staticMethodName(Parameters) {
        // 静态方法的实现
    }
}

2.3.2. 抽象类

抽象类可以包含抽象方法(没有实现的方法)和具体方法。子类必须实现抽象类中的所有抽象方法。一个类只能继承一个抽象类。

定义抽象类:

abstract class AbstractClassName {
    abstract ReturnType methodName(Parameters);

    ReturnType methodName(Parameters) {
        // 具体方法的实现
    }
}

继承抽象类:

class ClassName extends AbstractClassName {
    // 实现抽象类中的所有抽象方法
}

示例2:抽象类

abstract class Shape {
    abstract double getArea();

    void printArea() {
        System.out.println("The area is " + getArea());
    }
}

class Circle extends Shape {
    double radius;

    @Override
    double getArea() {
        return Math.PI * radius * radius;
    }
}

class Square extends Shape {
    double sideLength;

    @Override
    double getArea() {
        return sideLength * sideLength;
    }
}

class Main {
    public static void main(String[] args) {
        Circle circle = new Circle();
        circle.radius = 5;
        circle.printArea(); // 继承自抽象类的具体方法

        Square square = new Square();
        square.sideLength = 4;
        square.printArea(); // 继承自抽象类的具体方法
    }
}

2.3.3. 接口与抽象类的区别

  1. 一个类可以实现多个接口,但只能继承一个抽象类。
  2. 接口中的方法默认是 public,不能有其他访问修饰符。抽象类中的方法可以有不同的访问修饰符。
  3. 接口不能包含实例变量(成员变量),只能声明静态常量。抽象类可以包含实例变量。
  4. 接口支持默认方法和静态方法,抽象类不支持默认方法。

2.3.4. 何时使用接口和抽象类?

  • 当你想要定义一组相关对象应该实现的方法,但不关心具体的实现时,使用接口。
  • 当你想要为一组相关对象提供共享的实现和行为时,使用抽象类。
  • 如果需要实现多个不同的行为组合,使用接口。因为 Java 不支持多继承,所以不能继承多个抽象类,但可以实现多个接口。

2.3.5. 小结

通过本节的学习,我们了解了接口和抽象类的概念以及它们之间的区别。接口和抽象类都可以实现抽象和多态,选择使用哪个取决于具体的需求和设计。

我们学习了如何定义接口和抽象类,如何使用它们来实现多态,并通过具体的例子加深了对这两个概念的理解。

在实际开发中,根据具体的应用场景和需求,合理地使用接口和抽象类,可以帮助我们设计出更加灵活、可扩展和易于维护的代码。

2.3. 接口与抽象类

2.3. 接口与抽象类

推荐阅读:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

2.3. 接口与抽象类文章来源地址https://www.toymoban.com/news/detail-474127.html

到了这里,关于2.3. 接口与抽象类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第08章_面向对象编程(高级)(static,单例设计模式,理解mian方法,代码块,final,抽象类与抽象方法,接口,内部类,枚举类,注解,包装类)

    回顾类中的实例变量(即非static的成员变量) 创建两个Circle对象: Circle类中的变量radius是一个实例变量(instance variable),它属于类的每一个对象,c1中的radius变化不会影响c2的radius,反之亦然。 如果想让一个成员变量被类的所有实例所共享,就用static修饰即可,称为类变量(

    2024年01月25日
    浏览(48)
  • typescrip接口 interface详解,以及ts实现多态

    当一个对象类型被多次使用时,一般会使用接口(interface)来描述对象的类型,达到复用的目的 示例如下 当一个对象类型被多次使用时,可以看到,很明显代码有大量的冗余 这个时候可以将这个对象定义为接口,以进行复用,可以看到,这样代码就少了很多冗余 使用interface来声明

    2024年02月19日
    浏览(33)
  • c++ - 抽象类 和 使用多态当中一些注意事项

     在虚函数的后面写上 =0 ,则这个函数为纯虚函数。 纯虚函数不需要写函数的定义,他有类似声明一样的结构。  我们把具有纯虚函数的类,叫做抽象类。 所谓抽象就是,不符合常理的,偶然的,和平常的类不太一样的类。抽象一般是我们人自己想出来的形象,在现实世界

    2024年02月09日
    浏览(34)
  • C++三大特性—多态 “抽象类与虚函数表”

    抽象类和虚函数表是 C++中实现多态性的重要概念,它们对于学习 C++非常重要。 掌握抽象类和虚函数表的使用方法对于理解 C++的多态性是非常重要的。在 C++中,通过使用抽象类和虚函数表,可以实现基于多态性的各种功能,如继承、多态、模板等。同时,在实际应用中,抽

    2024年02月07日
    浏览(38)
  • 从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题

    目录 1. 多态(polymorphism) 1.1 构成多态的两个条件 1.2 虚函数重写(覆盖) 1.3 协变构成多态 1.4 父虚子非虚构成多态 1.5 析构函数的重写 1.6 final 和 override (C++11) 1.7 重载、覆盖、隐藏的对比 2. 抽象类(Abstract Class) 2.1 纯虚函数和抽象类 2.2 抽象类指针 2.3 接口

    2024年02月13日
    浏览(42)
  • C++类和对象-多态->多态的基本语法、多态的原理剖析、纯虚函数和抽象类、虚析构和纯虚析构

    #includeiostream using namespace std; //多态 //动物类 class Animal { public:     //Speak函数就是虚函数     //函数前面加上virtual,变成虚函数,那么编译器在编译的时候就不能确定函数调用了。     virtual void speak()     {         cout \\\"动物在说话\\\" endl;     } }; //猫类 class Cat

    2024年02月20日
    浏览(37)
  • 【Rust 基础篇】Rust Trait 实现:灵活的接口抽象

    Rust是一种以安全性和高效性著称的系统级编程语言,其设计哲学是在不损失性能的前提下,保障代码的内存安全和线程安全。为了实现这一目标,Rust引入了\\\"所有权系统\\\"、\\\"借用检查器\\\"等特性,有效地避免了常见的内存安全问题。然而,在编程中我们常常需要实现多态和抽象

    2024年02月15日
    浏览(37)
  • 设计模式学习笔记 - 面向对象 - 2.封装、抽象、继承、多态分别用来解决哪些问题?

    封装 也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方法(或者叫作函数)来访问内部信息或数据。 下面这段代码是一个简化版的虚拟钱包的代码实现。在金融系统中,我们会给每个用户创建一个虚拟钱包,用来记录用户在我们

    2024年02月21日
    浏览(45)
  • 【C++入门到精通】C++入门 —— 多态(抽象类和虚函数的魅力)

    前面我们讲了C语言的基础知识,也了解了一些数据结构,并且讲了有关C++的命名空间的一些知识点以及关于C++的缺省参数、函数重载,引用 和 内联函数也认识了什么是类和对象以及怎么去new一个 ‘对象’ ,也了解了C++中的模版,以及学习了几个STL的结构也相信大家都掌握

    2024年02月11日
    浏览(41)
  • 【C++庖丁解牛】面向对象的三大特性之一多态 | 抽象类 | 多态的原理 | 单继承和多继承关系中的虚函数表

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 需要声明的,本节课件中的代码及解释都是在vs2013下的x86程序中,涉及的指针都是4bytes。如果要其他平台

    2024年04月10日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包