zoukankan      html  css  js  c++  java
  • 叩开抽象的大门(1)——抽象类、接口

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

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

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

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

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

    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

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

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

  • 相关阅读:
    基于MFC的Media Player播放器的制作(1---播放器界面的布局)
    Codeforces 1182
    Codeforces 1169
    Codeforces 1167
    Codeforces 1166
    Codeforces 1148
    *Codeforces 1162
    Codeforces 1159
    点分治
    高斯消元*
  • 原文地址:https://www.cnblogs.com/weilao/p/2060375.html
Copyright © 2011-2022 走看看