何时使用抽象类?

 

题记:

抽象类从代码的样子上来看像是类和接口的中间过渡产品。它既可以包含实现了的方法,也可以包含没有实现的方法。

所有的文档都说它不能被实例化。可是我们有没有想过它为什么不能被实例化?我的答案是,假设它可以被实例化,那么它未被实现的方法怎么使用?

 


  
下面说下这篇文章的主题,何时使用抽象类?


  我觉得是
当你想使用具有接口特性的普通类作为基类时。简单地说,就是你想设计一个类作为一些类的基类,但仅仅希望实现这个基类中的部分方法时。


  
举一个例子:


  
有很多品种的羊,山羊、绵羊、喜羊羊等。。设计一个基类具有如下两个方法:

public abstract class 羊
{
      public abstract void 吃草();

      public abstract void 展示羊毛特征();
}

  

假设各种羊的吃草动作都是一样的,那么在各种羊继承这个基类的时候就没必要再各自重写一遍这个方法的实现了。只需要在基类中一次性实现就好了。而各种羊的样貌特征是不一样的,即使在基类中做了实现,那么在各子类中也要再次实现各自的样貌特征展示操作,所以,我们干脆就不再基类中实现这个方法了。即:

public abstract calss 羊
{
     public virtual void 吃草()
     {
           //some code here
     }

     public abstract void 展示样貌特征();
}

  这样,基类里既有实现了的方法,又有不需要实现的方法,这个类自然就是抽象类了。这就是我所理解的使用情景。


  另外,在实际编程中,没必要硬用抽象类或接口,该用的时候自然就用了。很赞同《代码大全》里的一句话:“一个合理的设计一定是漂亮的”,如果一个实现方法让你觉得很别扭,那一定是错的实现方法。


  参考文章:

  http://blog.csdn.net/b271737818/article/details/3950245

  http://stackoverflow.com/questions/1913098/what-is-the-difference-between-an-interface-and-abstract-class

  https://www.ibm.com/developerworks/cn/java/l-javainterface-abstract/

  http://www.codeproject.com/Articles/11155/Abstract-Class-versus-Interface



 

 

转载于:https://www.cnblogs.com/chinaoarq/p/3690363.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值