为什么使用抽象类?


抽象类从代码的样子上来看像是类和接口的中间过渡产品。它既可以包含实现了的方法,也可以包含没有实现的方法。 所有的文档都说它不能被实例化。

可是我们有没有想过它为什么不能被实例化?

我的答案是,假设它可以被实例化,那么它未被实现的方法怎么使用?


下面说下这篇文章的主题, 为什么使用抽象类?

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

举一个例子:

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


class 羊
{
      吃草();

      展示羊毛特征();
}


假设各种羊的吃草动作都是一样的,那么在各种羊继承这个基类的时候就没必要再各自重写一遍这个方法的实现了。只需要在基类中一次性实现就好了。

 

而各种羊的样貌特征是不一样的,即使在基类中做了实现,那么在各子类中也要再次实现各自的样貌特征展示操作,所以,我们干脆就不再基类中实现这个方法了。即:

calss 羊
{
     吃草()
     {
           //some code here
     }

      展示样貌特征();
}


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

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


参考文章:


http://blog.youkuaiyun.com/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




抽象类是一种特殊的,它不能直接实例化,主要是为了提供一种通用的框架,用于表示一组相关的但并未完全实现的。它的主要特点是包含抽象方法(即没有具体实现的方法),或者至少有一个抽象方法。抽象方法由`abstract`关键字标记,没有方法体。 使用抽象类的主要原因有: 1. **代码复用**:通过共享共同的行为和属性,抽象类可以避免重复代码,提高代码的组织性和模块性。 2. **接口实现**:当需要创建一组相似但又有各自特性的时,抽象类允许提供一个基本的模板。 3. **型安全**:通过定义抽象方法,可以保证子必须实现某些特定的功能,增强系统的稳定性。 举个例子,在Java中,如果你有一系列图形,如矩形、圆形和三角形,它们都有一些共同的操作,比如计算面积。这时,你可以定义一个名为`Shape`的抽象类,包含一个抽象方法`calculateArea()`。然后,每个具体的形状(`Rectangle`, `Circle`, `Triangle`)继承自`Shape`,并在其中实现`calculateArea()`方法。 ```java abstract class Shape { abstract double calculateArea(); } class Rectangle extends Shape { private double width; private double height; public Rectangle(double width, double height) { this.width = width; this.height = height; } @Override double calculateArea() { return width * height; } } // Circle和Triangle似,这里省略了 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值