abstract class 和 interface 有什么区别

这篇具有很好参考价值的文章主要介绍了abstract class 和 interface 有什么区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录
  • abstract class 和 interface 有什么区别
    • 1.抽象类
      • 1.1抽象类的格式
      • 1.2抽象类注意事项
    • 2.接口
      • 2.1接口的格式
      • 2.2接口可以多继承
      • 2.3接口的实现(implements)
    • 3.异同

abstract class 和 interface 有什么区别

1.抽象类

抽象类:声明方法的存在而不实现的类,如果一个类中没有包含足够的信息来描绘一个具体的对象,它只能被继承,派生出子类,这样的父类就是抽象类。

1.1抽象类的格式

[public] abstract class 类名 [extends父类] [implements接口列表]
{
    //属性声明及初始化;
    //抽象方法的声明;
    //非抽象方法声明及方法体;
}

1.2抽象类注意事项

1.修饰抽象类的修饰符有public和默认修饰符两种;

2.抽象类中可以有抽象方法,也可以有非抽象的方法;

3.抽象方法是无方法体的方法。

4.定义抽象类时,要在关键字class的前面添加abstract。

5.抽象类不能被实例化;

6.其包含的抽象方法必须在其子类中被实现,否则该子类只能声明为abstract;

7.抽象方法不能为static;

8.在下列情况下,一个类必须声明为抽象类:

  1. 当一个类的一个或多个方法是抽象方法时;
  2. 当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分;
  3. 当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;

2.接口

由于类的多继承能够导致方法调用的冲突,所以Java中的类只能单继承。但是很多时候还是需要多继承的,Java中的接口就可以实现多继承,接口中不存在具体方法,不会引起方法调用的冲突。instanceof运算符可以用来决定某对象的类是否实现了接口

2.1接口的格式

[public] interface 接口名 [extends 父接口列表]{
     // 属性声明,不写也是公共常量
     [public] [static] [final] 属性类型属性名 = 常量值 ;
     // 方法声明
     [public] [abstract] 返回值类型方法名 ( 参数列表 ) ;
}

1.接口中只包含常量和抽象方法,而没有变量和方法的实现,接口对类来说是一套规范,是一套行为协议。
2.接口不是一个类,不能实例化。
3.接口规定了类的共同行为。
4.在Java中,接口的声明采用interface关键字,接口不是一个类,没有构造方法,不能被实例化。
5.修饰接口的修饰符只有public和默认修饰符两种,不写也是public的
6.接口可以是多继承,接口只能继承接口,不能继承类。
7.属性必须是常量(有初值),方法必须是抽象的(无方法体)。

2.2接口可以多继承

//B,C也是接口
public interface A extends B,C {
}

2.3接口的实现(implements)

如果一个类要实现一个接口,那么这个类就必须实现接口中所有抽象方法。否则这个类只能声明为抽象类,多个无关的类可以实现一个接口,一个类可以实现多个无关的接口,一个类可以在继承一个父类的同时,实现一个或多个接口。

class 类名 [extends 父类] [implements 接口列表]
{
 覆盖所有接口中定义的方法;
}

3.异同

相同:子类必须实现它门的抽象方法,抽象类与接口都不能创建自己的对象
不同:继承使用extends,接口的实现用implements
抽象类可以没有抽象方法,接口中方法都是抽象的
抽象类可以有自己构造器及普通方法,接口中没有构造器
子类只能继承一个抽象类,但可以实现多个接口
抽象类主要通过共享的属性,接口主要提供共享的方法文章来源地址https://www.toymoban.com/news/detail-746306.html

到了这里,关于abstract class 和 interface 有什么区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 分分钟搞定Java中的抽象类和接口!!!(abstract & interface)

    1.抽象类的定义 概述: 我们创建一个动物类,并且在这个类中创建动物对象,但是当你提到动物类,你并不知道我说的是什么动物,只有看到了具体的动物,你才知道这是什么动物,所以说动物本身并不是一个具体的事物,而是一个抽象的事物。只有真正的猫,狗才是具体的

    2024年02月01日
    浏览(45)
  • C++ 语言类 (class) 和抽象数据类型 (abstract data type)

    在 C++ 语言中,我们使用类定义自己的数据类型。通过定义新的类型来反映待解决问题中的各种概念,从而使得程序更加简洁旦易于修改。数据抽象能帮助我们将对象的具体实现与对象所能执行的操作分离开来。 类的两项基本能力:一是数据抽象,即定义数据成员和函数成员

    2023年04月10日
    浏览(33)
  • Python 抽象属性中发生的错误 TypeError: Can‘t instantiate abstract class XXX with abstract methods xxx

    本篇文章我们介绍一个和抽象属性相关的错误, TypeError: Can’t instantiate abstract class Bike with abstract methods mileage 。 然后将介绍使用 abc 或抽象基类模块在 Python 中创建具有抽象属性的类。 如果在我们写代码的过程中产生了错误 TypeError: Can’t instantiate abstract class XXX with abstract

    2024年02月06日
    浏览(57)
  • TypeScript 中【class类】与 【 接口 Interfaces】的联合搭配使用解读

    导读 : 前面章节,我们讲到过 接口(Interface)可以用于对「对象的形状(Shape)」进行描述。 本章节主要介绍接口的另一个用途,对类的一 部分行为进行抽象。 类配合实现接口 实现( implements )是面向对象中的一个重要概念。 一般来讲,一个类只能继承自另一个类 ,但

    2024年02月14日
    浏览(38)
  • PHP 在function中直接实例化interface,不用再class 后 implement

    突发奇想,php能不能实现类似java 那种把interface 类当作方法的参数呢? java 代码如下: 经过调查,在国内的帖子上没有找到类似的实现。只好求助于google 了。我在 stackoverflow 上发布了一个帖子,然而第二天被告知和其他问题重复了。我看了那个问题,和我想要的差不多。

    2024年02月16日
    浏览(41)
  • typescript中type、interface的区别

    一、概念定义  interface:接口 在TS 中主要用于定义【对象类型】,可以对【对象】的形状进行描述。 type :类型别名 为类型创建一个新名称,它并不是一个类型,只是一个别名。 二,区别 interface: interface 用来定义一个类结构,可以声明多个 使用interface声明,可以被继承扩

    2024年02月08日
    浏览(34)
  • typescript中interface和type的区别

    在TypeScript中,interface和type都用于定义类型,但它们有以下区别: 语法 interface使用interface来定义类型,而type使用type来定义类型。 定义方式 interface 可以通过继承其他interface来扩展自身的属性和方法,也可以多次声明同名的interface,它们会自动合并成一个接口。

    2024年02月16日
    浏览(46)
  • TypeScript中 interface 和 type 的区别

    区别1 使用 interface 和 type 都是表示给定数据结构的常用方法。 定义的方式略有不同。 type 定义的时候有 “=” 符号 区别2 interface 可以多次声明同一接口。它们将合并在一起形成一个接口定义。 type 只能声明一次。 interface:可以多次声明,并最终可共同复用; type:再次声明

    2024年02月14日
    浏览(35)
  • 在 TypeScript 中 interface 和 type 的区别

    在 TypeScript 中, interface  和  type  都用于定义自定义类型,但它们有一些区别: 语法风格: interface  使用  interface  开头,而  type  使用  type  开头。例如: 扩展和实现: interface  可以通过继承或合并来扩展其他接口,并支持类实现。而  type  在定义类型

    2024年02月13日
    浏览(33)
  • 【TypeScript】TS中type和interface在类型声明时的区别

    🐱 个人主页: 不叫猫先生 🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫优质专栏: vue3+vite+typeScript从入门到实践 📢 资料领取:前端进阶资料可以找我免费领取 🔥

    2023年04月26日
    浏览(61)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包