代码改变世界

叩开抽象的大门(1)——抽象类、接口

2011-05-27 23:32  威老  阅读(1826)  评论(5编辑  收藏  举报

面向对象的世界里,抽象是一个非常重要的概念。

这里我假定你已经知道什么是封装、继承、多态,却对什么什么是抽象还十分地迷茫。

现在让我们一起来来叩开抽象的大门。

抽象,就是抽出事物本质的东西。

风铃中的刀声:抽象:抽取对象的共同特征

egmkang:共同特征有:数据,行为

一、认识它

要理解面向对象里的抽象,首先需要知道两个概念:抽象类、接口。

你肯定知道抽象类可以有属性、方法,抽象类里方法可以只是一个声明。

也知道接口就是一组方法的声明。

也知道抽象类和接口都不能直接 类名/接口名  实例 =  new 类名/接口名(); 来实例化。

举个例子来说明:

wps_clip_image-19886

蜂鸟的翅膀和翠鸟的翅膀都是鸟类的翅膀。翅膀组合成鸟。(在这里我们假设所有的翅膀都有fly()的方法,并且所有的鸟都能飞。)

鸟类的翅膀不实现fly()方法,而是抽取出了子类的共同属性和方法。抽象类实现了子类的实现方式相同方法,而只把实现方式不同的方法声明为抽象方法,交由子类分别去实现。这样一来,同样的代码便不会出现两次了。

wps_clip_image-3596

这图体现了蜂鸟的翅膀和翠鸟的翅膀都实现了飞的接口,而鸟依赖飞的接口。

接口只是告诉子类,你应该有fly()的方法,fly()方法的参数和返回值应该是void。

二、区分它

wps_clip_image-16386

螺旋桨实现飞的接口,合情合理。但螺旋桨继承鸟类翅膀???脑袋进水了有木有!!!

为什么鸟要用螺旋桨飞?因为我的鸟只想要fly(),而有时候鸟想飞地更高、更久、更省力,此时鸟类的翅膀都不能满足需求,给它螺旋桨吧。

wps_clip_image-31130

这里我瞎扯一下。抽象派的艺术家,抽取出的是自己所想要情感,因此我们看到他的绘画作品,便能直接感受到艺术家的心情。因为艺术家略掉了所有次要的信息,因此他表达出来的效果便十分强烈。作为程序员,略掉次要的信息,意味着写出来的代码可读性更好,维护起来也更容易。

三、发疯的类图

wps_clip_image-9305

抽象类和接口的出现使得软件设计更加多样,通过使用不同的抽象方式,可以设计出各种各样的系统。

如果你要的仅仅是一只蜂鸟。后面的设计明显小题大做了。。。