1 继承
  • 使用extends继承一个类
  • 子类会继承父类可见的属性和方法,不包含构造方法
  • 可以复写父类的方法
  • 单继承,多态性
构造方法
  • 子类的构造方法会默认调用父类的无名无参构造方法
  • 如果父类没有无名无参,则需要显示调用父类构造方法
class Student extends Person{
Student(int salary, int month) : super(salary, month);
} class Person {
int salary;
int month;
Person(this.salary, this.month); //构造方法并赋值
Person.withSalary(this.salary); //命名构造方法
num get yearSalary => (salary * month); //计算属性
work() {
print("work...");
}
}

2 抽象类

  • 使用abstract定义
  • 抽象类可以没有抽象方法
  • 抽象方法无须abstract,无实现
  • 有抽象方法的类必须定义成抽象类
  • 抽象类不能实例化,需要子类继承覆写抽象方法
//abstract定义抽象类
abstract class Person {
//可以没有抽象方法
//抽象方法 不用abstract修饰,无实现
void run();
}
3 接口
  • 类和接口是统一的,类就是接口
  • 每个类都隐式的定义了一个包含所有实例成员的接口
  • 如果是复用已有类的实现,使用继承extends
  • 如果是使用父类的行为,使用implements接口 (结合抽象类实现)
//abstract定义抽象类( 类即接口)
abstract class Person {
//可以没有抽象方法
//抽象方法 不用abstract修饰,无实现
void run();
} class Student implements Person{
@override
void run() {
// TODO: implement run
}
}
4 Mixins (非常强大,需要在实际运用中领会)
  • 类似于多继承,是在多继承中重用一个类代码的方式。(在一个类中使用多个类的属性和方法)
  • 作为Minxins的类不能有显示的构造方法
  • 作为Minxins的类只能继承(extends)Object ,可以implements 接口
  • 使用with连接一个或多个mixins
void main() {
C().a();//由于B是最后with的,这里调用的是B的a方法
C().b();//这里调用的是B的b方法
} class C extends A with B {}//C拥有A、B的属性和方法啦 class A {
a() {
print("a.a");
}
} class B {
a() {
print("b.a");
} b() {
print("b.b");
}
}

5 操作符覆写

void main() {
print(Person.withAge(18) > Person.withAge(20));
} class Person {
int age;
Person.withAge(this.age); bool operator >(Person p) {
return this.age > p.age;
}
}
6 枚举
使用与java类似。不同在于可以获取枚举的索引,默认从0开始。
 
7 泛型
使用与java类似。
  • 类的泛型:定义在类级别上
  • 方法的泛型:定义在方法上
void main() {
var utils = new Utils<String>();
utils.put("Hello!";)
} class Utils<T> {
T element;
void put(T element) {
this.element = element;
}
}

Dark 面向对象的更多相关文章

  1. C++面向对象多线程入门

    第1节   背景 为了更好的理解多线程的概念,先对进程,线程的概念背景做一下简单介绍. 早期的计算机系统都只允许一个程序独占系统资源,一次只能执行一个程序.在大型机年代,计算能力是一种宝贵资源.对于资 ...

  2. 第七篇 Python面向对象

    类是对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用,特征被称为属性,行为被称为方法,类就相当于制造飞机时的图纸,是一个模板,是负责创建对象的. 对象是由类创建出来的一个具体存在,可 ...

  3. Java学习笔记之---面向对象

    Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...

  4. angular2系列教程(六)两种pipe:函数式编程与面向对象编程

    今天,我们要讲的是angualr2的pipe这个知识点. 例子

  5. 一起学 Java(二)面向对象

    一.方法函数 函数也称为方法,就是定义在类中的具有特定功能的一段独立代码.用于定义功能,提高代码的复用性. 函数的特点1> 定义函数可以将功能代码进行封装,便于对该功能进行复用:2> 函数 ...

  6. js面向对象学习 - 对象概念及创建对象

    原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...

  7. 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型

    前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...

  8. .NET 基础 一步步 一幕幕[面向对象之对象和类]

    对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...

  9. 简单分析JavaScript中的面向对象

    初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...

随机推荐

  1. Spark报错java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

    Spark 读取 JSON 文件时运行报错 java.io.IOException: Could not locate executable null\bin\winutils.exe in the ...

  2. 无Xwindow的linux系统安装VMware Tools

    首先登陆linux 系统,最好是root用户: 然后挂载cdrom: mkdir -p /mnt/cdrom mount -t iso9660 /dev/cdrom /mnt/cdrom 进入cdro ...

  3. 16、Nginx Rewrite重写

    1.Rewrite基本概述 1.1.什么是rewrite Rewrite主要实现url地址重写, 以及地址重定向,就是将用户请求web服务器的地址重新定向到其他URL的过程. 1.2.Rewrite使 ...

  4. tornado实现高并发爬虫

    from pyquery import PyQuery as pq from tornado import ioloop, gen, httpclient, queues from urllib.pa ...

  5. Mysql配置查询

    查看mysql数据库的线程数: show global status like 'Thread%'; 如果我们在MySQL服务器配置文件中设置了thread_cache_size,当客户端断开之后,服 ...

  6. 使用ajax时给ajax绑定上一个进度条的简单示例

    直接放代码. <%@ page contentType="text/html;charset=UTF-8" language="java" %> & ...

  7. vscode预览markdown文件

    前提是需要安装Markdown Preview Enhanced插件

  8. linux命令详解之ls命令

    ls命令概述 ls命令用于显示文件目录列表,和Windows系统下DOS命令dir类似.当执行ls命令时,默认显示的只有非隐藏文件的文件名.以文件名进行排序及文件名代表的颜色显示.当不加参数时,默认列 ...

  9. grunt-contrib-compass 编译sass

    grunt-contrib-compass的作用是编译sass文件为css.使用该插件需要先安装sass和compass. (1)安装sassgem install sass(2)安装compassg ...

  10. 【leetcode】1271. Hexspeak

    题目如下: A decimal number can be converted to its Hexspeak representation by first converting it to an ...