C#中声明了一个抽象类,但我看到代码中声明了一个抽象类的引用,并讲一个其派生类的实例赋值给它?

[复制链接]
查看11 | 回复4 | 2012-12-22 20:01:10 | 显示全部楼层 |阅读模式
抽象类只是不能创建实例,也就是不能直接new,但可以声明类型。不管是抽象类还是接口都可以声明类型。继承自抽象类的实体子类(派生类)本身也属于那个抽象类的类型,所以自然可以将子类实例赋值给它,而且这种情况通常是涉及oop中的一个多态性的使用。可以去参考C#的多态性。...
回复

使用道具 举报

千问 | 2012-12-22 20:01:10 | 显示全部楼层
这个就是多态的前提,所有的基类都能用其派生类来实例化abstract class a{public abstract function xxxx();}class b:a{public override function xxxx(){//b的处理}}class c:a{public override fu...
回复

使用道具 举报

千问 | 2012-12-22 20:01:10 | 显示全部楼层
比如 吃的 就是一个抽象类,包子 是继承自 吃的的一个具体类。你说你要一个吃的,就是一个抽象类的引用,你妈去给你买了一个包子交给你,你就是用吃的这个抽象类引用一个具体类的实例。明白??...
回复

使用道具 举报

千问 | 2012-12-22 20:01:10 | 显示全部楼层
因为类型可能不安全。class1 a = new class2();在编译器看来,其实是两步骤:class1 a;a = new class2();a只不过是恰巧被被赋值成了 newclass2()而已,本质仍然是一个class1的类型。如果还不能理解,请看下面代码:class1 a;a = new class1(...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行