参考自d程序设计语言---个人博客http://my.oschina.net/u/218155/blog?fromerr=SwOkb7Sw fllow meide
d语言支持继承语法为this
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的构造方法spa
子类要覆盖父类的方法必须添加override关键字.net
final能够修饰类,方法,和变量,被修饰的类,方法,变量禁止覆盖设计
也支持子类向上转型为父类,可是不支持父类转型为子类code
d语言中全部的类都有共同的父类object对象
object自带以下方法blog
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); }