参考自d程序设计语言---我的博客http://my.oschina.net/u/218155/blog?fromerr=SwOkb7Sw fllow me
跟绝大部分opp编程语言的接口类似。
d语言的接口可以增加修饰符 private protected public
d语言也支持抽象类,使用abstract语法。
d语言也支持,内中嵌套类,方法中嵌套类,
class A{private DbObject _db; alias _db this;}这个是个很变态的语法,A可以任意转换成DbObject对象
import std.stdio;
import std.array;
interface light{
final void showLight(){
up();
down();
}
/*
private:
void up();
void down();
*/
void up();
void down();
}
class PhoneLight : light{
int a = 0;
//override private void up(){
override void up(){
a = 1;
showstatus();
}
//override private void down(){
override void down(){
a = 0;
showstatus();
}
void showstatus(){
writeln(a);
}
}
class Shape{
abstract void draw();
}
class RectangularShape : Shape{
abstract void drawFrame();
}
class Rectangle:RectangularShape {
override void draw(){
writeln("override draw");
}
}
class DbObject{
public void connect(){
writeln("connect to db");
}
}
class SolidRectangle:Rectangle{
private DbObject _db;
alias _db this;
this(){
_db = new DbObject();
}
override void drawFrame(){
writeln("override drawFrame");
}
}
class Outer{
int x = 0;
static int x1 = 1;
void fun(int a){
writeln(a);
}
static class Inner2{
void func(){
writeln(x1);
}
}
class Inner{
int y;
void gun(){
fun(x+y);
}
}
}
void func(int x){
class Inner{
int y;
void gun(){
writeln(x+y);
}
}
auto iner = new Inner;
iner.y =11;
iner.gun();
}
interface Stack(T){
@property bool empty();
@property ref T top();
void push(T value);
void pop();
}
class StackImpl(T):Stack!T{
private T[] _store;
@property bool empty(){
return _store.empty;
}
@property ref T top(){
assert(!empty);
return _store.back;
}
void push(T value){
_store ~= value;
}
void pop(){
assert(!empty);
_store.popBack();
}
}
unittest {
auto stack = new StackImpl!int;
assert(stack.empty);
stack.push(111);
stack.push(222);
assert(stack.top == 222);
stack.pop();
assert(stack.top == 111);
func(21);
Outer outer = new Outer;
auto obj = outer.new Inner;
auto pl = new PhoneLight();
//pl.up();
//pl.down();
pl.showLight();
//auto rectangele = new Rectangle();
auto solid = new SolidRectangle();
solid.drawFrame();
solid.connect();
DbObject db = solid;
db.connect();
}