TB = class(TBase) pbulic procedure Show; override; end; procedure TA.Show begin ShowMessage("This is A") end; procedure TA.Show begin ShowMessage("This is B") end; procedure P var base: TBase; begin base := TA.Create; base.show; //show message: this is a base := TB.Create; base.show; //show message: this is b end
2: 在Java中abstract的方法子类是必须实现的。和C++纯虚函数一样。 我在Delphi中些个父类包括以下函数 Function init():Boolean;virtual;abstract; 然后写了个子类,不实现这个方法好像一点问题都没有,编译没报错。。理论上应该有问题啊 子类没有实现抽象方法,编译肯定没有问题,但是不能实例化,如果要实例化必需实现父类的抽象方法。没有实现抽象方法的子类还是一个抽象类。
那么一般的面向对象技术,delphi当然都可以用了
现在回过头来用Delphi,才发现自己有很多不足的地方!
另外设计模式我觉得有他的可行之处,并不像 bluekitty 兄弟说的那么不中用,呵呵!
Delphi还能Aop?太牛了,还不知道怎么使用这机制!1:用过Delphi多态的兄弟,你们怎么用的。
写一个基类,写几个空方法,然后写多个子类,去实现这些空方法?2:另外Object Pascal我也不是很熟,Java有类和接口(解决多重继承),C++只有类(可以多重继承),
不知道Delphi中有没有Java中的接口概念?
Delphi VCL的设计模式用得很多啊.比如工厂模式,观察者模式等.退一万步说你只会拖拉控件,你看看的Form的代码,那个本身就是一个类啊.OOP是不知不觉的就在用啊
可能是我没说清楚,在Delphi中继承和封装我知道。我主要不知道怎么用多态。
2、接口当然有,关键字interface
确实,读书的时候学的是 pascal,没有学Object pascal 就直扑Delphi.
全心全意研究控件,上面后又整天纠结业务,没有花太多时间了解其他。
后来转Java了,最近比较闲,回过头来琢磨琢磨Delphi。呵呵。
让大伙见笑了。
1:在Java中只有对象,所以对象可以实现多态
在C++中多态必须通过 指针 才能完成,一般的对象好像搞不定
请问 Delphi 的多态是不是一定要指针呢?2: 在Java中abstract的方法子类是必须实现的。和C++纯虚函数一样。
我在Delphi中些个父类包括以下函数
Function init():Boolean;virtual;abstract;
然后写了个子类,不实现这个方法好像一点问题都没有,编译没报错。。理论上应该有问题啊
2你是不是私有了?
1.java也是不完全面向对象,因为它也包含了基本类型
你说的用对象和用指针来完成多态这些都是语言用法上的区别,底层的机制不都是地址么,delphi也是一样的,delphi也有虚函数和抽象函数的,所以实现方式跟其他语言完全一样3.纯虚函数的概念就是java中的接口。但是java中实现接口也需要完成接口中的方法。应该是语言的处理机制不一样吧。delphi中只有限制在父类中,virtual和dynamic的函数是在父类中必须有实现的,abstract的可以不实现,但是使用时必须和virtual、dynamic一起使用
function aaa(): Integer; virtual; // 必须实现
function bbb(): Integer; dynamic;abstract;
function ccc(): Integer; dynamic; // 必须实现
function ddd(): Integer; virtual;abstract;
多少能使你明白一些什么的。
1:在Java中只有对象,所以对象可以实现多态
在C++中多态必须通过 指针 才能完成,一般的对象好像搞不定
请问 Delphi 的多态是不是一定要指针呢?
所谓的多态:
TBase = class
pbulic
procedure Show; virtual;
end; TA = class(TBase)
pbulic
procedure Show; override;
end;
TB = class(TBase)
pbulic
procedure Show; override;
end; procedure TA.Show
begin
ShowMessage("This is A")
end; procedure TA.Show
begin
ShowMessage("This is B")
end;
procedure P
var
base: TBase;
begin
base := TA.Create;
base.show; //show message: this is a
base := TB.Create;
base.show; //show message: this is b
end
2: 在Java中abstract的方法子类是必须实现的。和C++纯虚函数一样。
我在Delphi中些个父类包括以下函数
Function init():Boolean;virtual;abstract;
然后写了个子类,不实现这个方法好像一点问题都没有,编译没报错。。理论上应该有问题啊 子类没有实现抽象方法,编译肯定没有问题,但是不能实例化,如果要实例化必需实现父类的抽象方法。没有实现抽象方法的子类还是一个抽象类。