zoukankan      html  css  js  c++  java
  • JAVA-初步认识-第九章-抽象类-概述

    一.

    在继承的上半部分的讲解中,先是介绍了类之间的继承关系,然后从类间的变量,方法(覆盖)入手,接着就是整个过程的内存图解,最后就是final修饰的全局变量(是叫全局变量,还是全局常量?)。

    继承中还有一部分,叫抽象类。(多次抽取,显得很抽象)

    为什么会出现抽象类,举个例子。

    截图中,DemoA和DemoB两个类具有相同的方法,如果两者之间没有继承关系(怎么看两者是不是继承关系?),那就可以向上抽取。抽取之后,子类继承父类即可。而且子类中的内容可以省略不写(父类中没有什么修饰符限制的成员,子类中完全复制么?),下面截图中保留了,其实可以省略。

    这就是我们之前所讲的继承,发现事物之间的关系,并将共性进行向上抽取。这样的话,可以提高代码的复用性。

    可是我们产生了一个问题:DemoA和DemoB确实有相同的功能但是内容不一样。我们都知道功能内部一般都处于封装形式,DemoA必然有显示功能,DemoB必然有显示功能,但是内容却不同。那就意味着函数分两部分,第一部分叫声明是一致的,函数体或者函数内容不一致。所以我们能明确,它们也具备共性,声明相同,功能内容不相同,我们也可以向上抽取,因为它们具备相同的功能。

    我们抽取了方法的声明,但是内容不能抽,抽不上来。最终形成的如下。叫做这类事物都具备这个功能,但是这工作的内容却不知道,因为每一个具体的事物都不知道。既然这个功能不能用大括号结束,定义不了内容的话,就用分号结束。结束语句,要么用大括号,要么用分号

    我们观看下面的截图,抽取出来的内容,真看不懂。这样的函数一定要做标识,怎么标呢?一定要用一个关键字abstract,就是抽象的意思。(只能提醒里面有这么一个方法,貌似作用不是很大)

    抽象关键字修饰函数,就称为抽象函数。抽象函数所在的类也必须标识成抽象的,为什么呢?这个事物当中,具备一个功能。这个功能是什么,怎么做的,不知道。那么这个事物也不具体。这个就是抽象类的由来。(有必要这么抽取么?)

    下面再举了一个例子,来描述抽象类。这里写的时候,我们是从下往上写的,先写了狗和狼,然后对相同的功能进行了抽取。但是,实际开发中,是通过分析,先有class 犬科,然后根据功能中具体内容的不同,分为狗和狼。

    功能细节确定不了,就是抽象方法,不具体的方法。犬科这个事物也具体不了。

    狗和狼继承了犬科,真正能具体吼叫,都是这些具体的事物,

    有人会说,那既然功能的内容都不一样,那么就将犬科删去,干嘛还要抽象。但是在实际中,除了吼叫,还有其他功能,比如睡觉,无论狗还是狼,都是趴着睡觉。这样一来就不是抽象的。

    (现在这么讲是有用处的,后面讲多态就知道了。)

    抽取和不抽取是有区别的,抽取也没内容,还不是由子类来实现么。在用的时候,不一样。让狗叫一下,得指挥狗。让狼叫一下,得指挥狼....很多种,直接指挥犬科吼叫,就简单多了

    讲述抽象类的原因就在于不断地抽取,这样就会产生抽象的东西,就需要抽象类。

  • 相关阅读:
    python 全栈开发,Day34(基于UDP协议的socket)
    python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)
    python 全栈开发,Day32(知识回顾,网络编程基础)
    python 全栈开发,Day30(第一次面向对象考试)
    python 全栈开发,Day30(纸牌游戏,异常和错误,异常处理)
    python 全栈开发,Day29(昨日作业讲解,模块搜索路径,编译python文件,包以及包的import和from,软件开发规范)
    python 全栈开发,Day28(复习,os模块,导入模块import和from)
    python 全栈开发,Day27(复习, defaultdict,Counter,时间模块,random模块,sys模块)
    python 全栈开发,Day26(hashlib文件一致性,configparser,logging,collections模块,deque,OrderedDict)
    css关系选择符
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/7751449.html
Copyright © 2011-2022 走看看