文档章节

d语言类的继承

轻舞凋零
 轻舞凋零
发布于 2016/02/01 14:33
字数 449
阅读 34
收藏 0

参考自d程序设计语言---我的博客http://my.oschina.net/u/218155/blog?fromerr=SwOkb7Sw fllow me

d语言支持继承语法为

class A{
    int a;
    this(){writeln("A");}
    this(int a){this.a = a;}
}
class B:A{
    this(){writeln("B");}
    this(int b){writeln("b is ",b);}
}

auto a = new B();//输出 A B
auto a = new B(11);//输出 A b is 11

子类B会自动调用父类A的构造方法

子类要覆盖父类的方法必须添加override关键字

final可以修饰类,方法,和变量,被修饰的类,方法,变量禁止覆盖

也支持子类向上转型为父类,但是不支持父类转型为子类

d语言中所有的类都有共同的父类object

object自带如下方法

toString toHash opEquals(Object ths)
opCmp(Object ths) static Object factory(string classname)

利用object创建对象

auto f4 = cast(A)Object.factory("test.A");
import std.stdio;

//final class Contract {
class Contract {
	//final int data = 1;
	int data;
	static this(){
		writeln("Contractoverride");
	}
	this(Contract source){

	}
	this() {
		
	}
	void dosomething(){
		writeln("do some thing");
	}
	string getBgColor(){
		return "black";
	}

	//final Contract dupli(){
	Contract dupli(){
		return new Contract(this);
	}
}

class Friend :Contract {
	static int count = 11;
	int data  = 3;
	string mycolor = "white";

	this(Friend source){

	}
	this() {
		
	}
	override string getBgColor(){
		super.dosomething();
		writeln(this.data+super.data);
		return mycolor;
	}
	//override Contract dupli(){
	override Friend dupli(){		
		return new Friend(this);
	}

	override bool opEquals(Object rhs){
		auto cop = cast(Friend) rhs;
		if(!cop) return false;
		return data == cop.data && mycolor == cop.mycolor;
	}

	override int opCmp(Object rhs){
		auto cop = cast(Friend) rhs;
		if(!cop) return -1;
		if(cop.data == data){
			return 0;
		}else if(cop.data > data){
			return 1;
		}else{
			return -1;
		}
	}

}

unittest {
	auto c = new Contract();
	assert(c.getBgColor() == "black");
	auto f = new Friend();
	assert(f.getBgColor() == "white");
	Contract c2 = new Friend();
	assert(c2.getBgColor() == "white");
	//Friend f2 = new Contract();//error
	Contract c3 = c.dupli();
	assert(c3.getBgColor() == "black");
	Friend f2 = f.dupli();
	assert(f2.getBgColor() == "white");
	//static 可以从对象调用
	//Object方法    toString toHash opEquals(Object ths)
	//opCmp(Object ths) static Object factory(string classname)
	assert(f2.count == 11);
	assert(f2.toString() == "inheritance_list.Friend");
	assert(f.opEquals(f2));
	f2.data = 21;
	assert(!f.opEquals(f2));
	assert(f.toHash());
	assert(f.opCmp(f) == 0);
	assert(f2.opCmp(f) == -1);
	auto f4 = cast(Friend)Object.factory("inheritance_list.Friend");
	assert(f4.data  == 3);
	
}

 

© 著作权归作者所有

共有 人打赏支持
上一篇: d语言之接口
下一篇: d语言之类
轻舞凋零
粉丝 13
博文 100
码字总数 16794
作品 0
昌平
程序员
私信 提问
D语言 2.069.1 发布,Bug 修复版本

D语言 2.069.1 发布,此版本修复了更新 Windows 版本时 dmd 安装器绑定的问题,详情请看发行说明。 D语言(Dlang)是由Digital Mars公司开发的编程语言,起因是为了改进C++。它与C二进制兼容...

oschina
2015/11/15
2K
7
D语言 2.069.2 Beta 发布,Bug 修复版本

D语言 2.069.2 Beta 发布,,此版本主要是 bug 修复,更新内容: DMD 编译器回退问题 Bugzilla 15292: [REG2.068.0] Segmentation fault with self-referencing struct / inout / alias thi......

oschina
2015/11/30
1K
5
Doxygen 1.8.1 发布,文档生成工具

Doxygen 1.8.1 发布,该版本改变了 HTML 输出的索引显示方法,增加很多外观的改进,显示成员的继承成员以及其他的一些改动和bug修复。 Doxygen 是一个 C++, C, Java, Objective-C、Python、I...

oschina
2012/05/20
630
3
D 2.069.0 Beta 发布,初步支持 Objective-C

编程语言 D 2.069.0 Beta 发布,D语言近期基本一月一更新,此版本主要改进如下: 编译器改进 DMD 已移植到 D 基本支持 Objective-C 废弃 -property 切换 改进 DMD 的编译 库改进 The packag...

oschina
2015/10/26
1K
11
Dlang 2.080.0 版本发布,系统级编程语言

近期D语言在版本发布迭代速度上有明显提升,此次D语言 2.080.0 版本更新特性如下: 增强编译时特性可用性 提供更好的 Objective-C 兼容 废弃一些早期版本不推荐使用的类和方法 对标准库的多方...

冰力
2018/05/13
837
6

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 白掌柜说了卖货不卖身

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @爱漫爱 :这是一场修行分享羽肿的单曲《Moony》 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :开不开心? 开心呀, 我又不爱睡懒觉…...

小小编辑
今天
9
0
大数据教程(11.7)hadoop2.9.1平台上仓库工具hive1.2.2搭建

上一篇文章介绍了hive2.3.4的搭建,然而这个版本已经不能稳定的支持mapreduce程序。本篇博主将分享hive1.2.2工具搭建全过程。先说明:本节就直接在上一节的hadoop环境中搭建了! 一、下载apa...

em_aaron
今天
3
0
开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
今天
4
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
今天
5
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部