can‘t be used as a mixin because it extends a class other than ‘Object‘.

news/2024/12/5 12:37:29/

程序员如果敲一会就停半天,抱着一杯茶,表情拧巴,那才是在编程

Flutter 项目开发指导 从基础入门到精通使用目录


前言 - 基础关键字

  • class:声明一个类,提供具体的成员变量和方法实现。
  • abstract class:声明一个抽象类,抽象类将无法被实例化。抽象类常用于声明接口方法、有时也会有具体的方法实现。
  • mixin:声明一个Mixin类,与抽象类一样无法被实例化,是一种在多重继承中复用某个类中代码的方法模式,可以声明接口方法或有具体的方法实现。
  • extends:继承,和其它语言的继承没什么区别。
  • with:使用Mixin模式混入一个或者多个Mixin类。
  • implements:实现一个或多个接口并实现每个接口定义的API。
  • on:限制Mixin的使用范围。

1 错误信息

Error: The class ‘B’ can’t be used as a mixin because it extends a class other than ‘Object’.
class C extends A with B{
^
Error: Compilation failed.

在这里插入图片描述

2 测试核心代码

测试使用工具 dartPad

https://dartpad.dartlang.org/flutter

class A {void run(){print("a run");}
}class B extends A{void run(){print("b run");}
}class C extends A with B{}
void main() {C c = C();c.run();
}

3 Dart with 关键字

关键字with表示使用了"Mixin"
mixin指的是将另一个或多个类的功能添加到您自己的类中,而不从这些类继承的能力.这些类的方法现在可以在类上调用,这些类中的代码将被执行.

Dart没有多重继承,但mixin的使用允许您在其他类中折叠以实现代码重用,同时避免多重继承可能导致的问题.
如下定义两个类A、B,分别有自己的方法,A与B分别是抽象的,不可直接创建实例:

abstract class A {void run() {print("a run");}void show(){}
}abstract class B {void run() {print("b run");}void eat() {print("b eat");}
}

再定义类C,要求C具备A与B的能力,可以定义如下:

class C extends A with B {}

如果要使 B 再具备 A的能力:

abstract class A {void run() {print("a run");}void show(){}
}abstract class B extends A{void run() {print("b run");}void eat() {print("b eat");}
}

如果B再继承A,那么上述定义的类C就会出现异常

Error: The class ‘B’ can’t be used as a mixin because it extends a class other than ‘Object’.
class C extends A with B{

正确的做法:

abstract class A {void run() {print("a run");}void show() {print("a show");}
}mixin B on A {void run() {print("b run");}void eat() {print("b eat");}
}class C extends A with B {}void main() {C c = C();c.run();c.eat();
}

http://www.ppmy.cn/news/20964.html

相关文章

力扣刷题记录——796. 旋转字符串、884. 两句话中的不常见单词、1046. 最后一块石头的重量

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《力扣刷题记录——796. 旋转字符串、884. 两句话中的不常…

【Java Swing】Java组件及事件处理

图形用户接口1、Swing概述2、Swing顶级容器3、布局管理器4、事件处理5、Swing常用组件1、Swing概述 Swing是一种轻量级的组件,它由Java语言开发,可以通过使用简洁的代码、灵活的功能和模块化的组件来创建优雅的用户界面Swing组建的继承关系 2、Swing顶…

MybatisPlus调用原生SQL

文章目录前言方法一方法二总结前言 在有些情况下需要用到MybatisPlus查询原生SQL,MybatisPlus其实带有运行原生SQL的方法。 方法一 这也是网上流传最广的方法,但是我个人认为这个方法并不优雅,且采用${}的方式代码审计可能会无法通过&#…

入职-环境安装篇

Git git的下载 安装 配置 Git 下载地址https://gitforwindows.org或https://git-scm.comGit 详细安装教程https://blog.csdn.net/mukes/article/details/115693833Git 安装完确认 git --versionGit 配置用户信息git config --global user.name "你的用户名" git conf…

LeetCode——2315. 统计星号

一、题目 给你一个字符串 s ,每两个连续竖线 ‘|’ 为 一对 。换言之,第一个和第二个 ‘|’ 为一对,第三个和第四个 ‘|’ 为一对,以此类推。 请你返回不在 竖线对之间,s 中 ‘*’ 的数目。 注意,每个竖…

Springboot+vue+vue在线日程管理系统 java

(1)应用主类SpringbootApplication应该放于根目录下springboot下,通常我们会在主类中做一些框架配置 扫描等配置,SpringbootApplication放在根目录下可以可以帮助程序减少手工配置来加载到我们希望被Spring加载的内容。   &…

linux基本功系列之sudo命令实战一

文章目录一.sudo命令介绍二. 语法格式及常用选项三. sudo配置文件详解3.1 sudo的配置文件3.2 配置文件注释3.3 sudo授权规则四. sudo常用参数实战 参考案例4.1 查看当前用户有哪些被sudo服务授权的命令4.2 结束密码的有效期4.3 限制用户的权限总结前言🚀&#x1f68…

Elasticsearch7.8.0版本入门——JavaAPI操作(文档操作)

目录一、pom文件依赖二、创建实体对象类三、文档操作代码示例3.1、创建文档代码示例3.2、修改文档代码示例3.3、查询文档代码示例3.4、删除文档代码示例一、pom文件依赖 引入相关依赖 <!-- elasticsearch 依赖 --> <dependency><groupId>org.elasticsearch&l…