參考自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); }