文档章节

d语言类的继承

轻舞凋零
 轻舞凋零
发布于 2016/02/01 14:33
字数 449
阅读 34
收藏 0
点赞 1
评论 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);
	
}

 

© 著作权归作者所有

共有 人打赏支持
轻舞凋零
粉丝 13
博文 99
码字总数 16794
作品 0
昌平
程序员
Dlang 2.080.0 版本发布,系统级编程语言

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

冰力 ⋅ 05/13 ⋅ 0

LDC 1.9.0 发布,基于 LLVM 架构的 D 语言编译器

Kinke 代表LDC团队,很高兴地宣布LDC 1.9,这个版本的重点是: 编译器兼容 dlang 2.079.1 (引入了新的 -i 参数来支持最小D语言运行时); 支持 llvm 6,用于所有预构建包(Win32除外); 可...

冰力 ⋅ 05/13 ⋅ 3

hunt framework v1.1.0 发布,帮助开发者提升效率

hunt framework 本次版本主要对易用性进行升级,为了能让更多PHP开发者更容易的去使用D语言框架我们也尝试的引入了类似PHP的一些函数定义。 本次版本主要改进如下: 增加Task工作模式 在Act...

冰力 ⋅ 前天 ⋅ 0

D 语言数据库驱动层 - Dbal

Dbal 是 HuntLabs 开发的D语言(dlang)数据库驱动层,类似 PHP 的 PDO、JAVA 的 JDBC,内置连接池支持。 目前支持的数据库驱动: PostgreSQL 8+ MySQL 5.1+ SQLite 3+ 示例代码 import std...

冰力 ⋅ 05/14 ⋅ 0

Hunt framework 1.1.1 发布,可用性修复

Hunt是D语言编写的全栈 web framework,拥有和 C++ 相媲美的性能,有带来的和 PHP、JAVA 一样简单的使用方式,可以看做是 dlang 编写的 Laravel / Spring boot / Django / Rails 框架。 最近...

冰力 ⋅ 昨天 ⋅ 0

Java中如何恰当的表达“继承”与“扩展”的语义?

”继承“是Java的面向对象学习过程中的大难题,原因有二: ”is-A“的关系本身就不好理解 Java中的extends“扩展”与面向对象中的“继承”inheritance不是一一对应的。 很多书里认为继承与扩...

monkeysayhi ⋅ 2017/10/30 ⋅ 0

父类上的注解能被子类继承吗

父类上的注解可以被子类继承吗? 转载自:http://wzhw2008.iteye.com/blog/1723136 ----------------------------------------------------------------- 我们知道在编写自定义注解时,可以通...

宇的季节 ⋅ 2017/11/25 ⋅ 0

OC学习笔记十一 继承

继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力.一个类继承另外一个类,就具有该类的属性和方法。例如A类继承B类,A类就具有B类的属性和方法,A类称...

卧龙小 ⋅ 2014/10/12 ⋅ 0

一入前端深似海,从此红尘是路人系列第一弹之浅析JavaScript继承

继承算是JavaScript中的一大难点也是必须掌握的知识点。接下来我会列举一些我们常见的继承并给出对应一些的code方便大家理解。 1.类式继承,既子类原型继承父类实例化。但是当我利用new关键字...

qiangdada ⋅ 2016/09/10 ⋅ 0

C++中的继承

何为继承? 何为继承?在现实生活中继承这个词很常见。继承意志,继承父母留给我们的财产。继承在我们生活中很常见。在C++中继承是其一大特性。 面向对象程序设计(OOP)的核心思想是数据抽象...

sdoyuxuan ⋅ 2017/02/25 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿“德州扒鸡”...

python玩家 ⋅ 15分钟前 ⋅ 0

MySQL 内核深度优化

MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务...

java高级架构牛人 ⋅ 37分钟前 ⋅ 0

用户登录信息-钉子效果(基于jquery2.0)

本js效果使用jquery2.0,清晰的分解用户登录信息的(钉子效果),该效果直接用在作者网站(www.phpkhbd.com)上。 里面的难点有:定时器,延时。 大致效果如下: 一开始: 鼠标放上去的时候:...

宁哥实战课堂 ⋅ 38分钟前 ⋅ 0

解决yum安装报错Protected multilib versions

使用yum安装报错Protected multilib versions原因是因为多个库不能共存,不过更新的话也并不行,但是可以在安装命令后面加上如下一段命令: --setopt=protected_multilib=false 案例: 比如需...

北岩 ⋅ 50分钟前 ⋅ 0

为什么要学习Typescript???

简单来说 目前的typescript就是未来的javascript 为什么?? 这要从ECMA-262标准的第4版说起 对了 我们说的ES5 其实是ECMAScript3.1这个替代性建议被扶正了而已... 那么 第4版标准是什么? 看看...

hang1989 ⋅ 54分钟前 ⋅ 0

linux安装ipfs

一、下载ipfs # cd /usr/local/ipfs/ # wget https://dist.ipfs.io/go-ipfs/v0.4.15/go-ipfs_v0.4.15_linux-amd64.tar.gz # tar -zxvf go-ipfs_v0.4.15_linux-amd64.tar.gz 二、安装ipfs # ......

八戒八戒八戒 ⋅ 今天 ⋅ 0

jvm程序执行慢诊断手册

生产环境最多的几种事故之一就是程序执行慢,如果是web服务的话,表现就是响应时间长。本文分享,从业多年形成的排查守则。 诊断步骤 系统资源查看 首先是系统资源查看,而且必须是在第一步。...

xpbob ⋅ 今天 ⋅ 0

YII2 advanced 高级版本项目搭建-添加API应用以及多应用

一、YII安裝 安裝yii可以用composer安裝,也可以在yii中文社区下载归档文件安装 composer安装就不介绍了,因为要安装composer,比较麻烦,当然安装了composer是最好的,以后安装yii的插件要用...

botkenni ⋅ 今天 ⋅ 0

在jdk1.8的环境下模拟永久代内存溢出

相信不少小伙伴在看深入理解Java虚拟机的时候,作者给我们举例一个demo来发生PermGen space 1、通过List不断添加String.intern(); 2、通过设置对应的-XX:PermSize与-XX:MaxPermSize(更快看到...

虾几把写 ⋅ 今天 ⋅ 0

开发OpenDaylight组件的完整流程

在前面介绍学习了OpenDaylight的几个重要模块后,这里再来介绍下完整开发一个模块的过程。 OSGI的bundles提供被其他OSGI组件调用的服务。这个教程中展示的是Data Packet Service去解析数据包...

wangxuwei ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部