求帮忙理解一句代码

丹青城 2014-11-04 04:05:01

求助 private CashSuper cs;
CashSuper 是一个抽象类,为什么这里可以这样写?
...全文
214 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
丹青城 2014-11-06
  • 打赏
  • 举报
回复
引用 8 楼 youzelin 的回复:
声明成 CashSuper 是因为,真正的具体实例化的类可能是他的子类中的一个。 比如,有 Cash1, Cash2, ...... Cash1000 分别继承了 CashSuper,但是作为父类,其中的操作不可能硬编码预判你传进来的是哪一个类,但是他们都继承了 CashSuper,那就在 CashSuper 中定义一个方法,但是可以不实现:public abstract void Exec(); 由对应的子类去实现?这样定义就可以直接操作 cs.Exec 从而不用考虑是哪一个子类。具体的执行就由子类去完成。 这样说你能明白吗?
谢谢啦,这样有点明白了
卧_槽 2014-11-05
  • 打赏
  • 举报
回复
只是声明一下,为什么不可?
youzelin 2014-11-05
  • 打赏
  • 举报
回复
声明成 CashSuper 是因为,真正的具体实例化的类可能是他的子类中的一个。 比如,有 Cash1, Cash2, ...... Cash1000 分别继承了 CashSuper,但是作为父类,其中的操作不可能硬编码预判你传进来的是哪一个类,但是他们都继承了 CashSuper,那就在 CashSuper 中定义一个方法,但是可以不实现:public abstract void Exec(); 由对应的子类去实现?这样定义就可以直接操作 cs.Exec 从而不用考虑是哪一个子类。具体的执行就由子类去完成。 这样说你能明白吗?
殘丿__花 2014-11-05
  • 打赏
  • 举报
回复
抽象类和接口一样,都可以声明的,用派生类来实例化
qq_21694455 2014-11-04
  • 打赏
  • 举报
回复
只是创建对象,并没有实例化。可以用抽象基类创建对象来引用派生类的实例。
我现在在路上 2014-11-04
  • 打赏
  • 举报
回复
那只是创建个引用,并没有实例化(分配内存)。
江南小鱼 2014-11-04
  • 打赏
  • 举报
回复
抽象类作为具体实现的基类 比如Animal是抽象基类,有一个Song的抽象方法,派生出Dog、Cat等基类 要听鸡叫、还是听猫叫,到客人点歌时才知道 这个时候,基类就没实例化成Dog或者Cat
moonwrite 2014-11-04
  • 打赏
  • 举报
回复
如2楼所说 策略模式 推荐看《Head First 设计模式》
smthgdin_020 2014-11-04
  • 打赏
  • 举报
回复
private CashSuper cs; 抽象类不能实例化,但是定义一个抽象类的变量没有问题,到时候用具体派生类去赋值就行了。
xian_wwq 2014-11-04
  • 打赏
  • 举报
回复
策略模式就是这么写
exception92 2014-11-04
  • 打赏
  • 举报
回复
抽象类 不能实例化,还不能声明么。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧