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

    一.

    针对抽象类整体进行一个认识。

    1.抽象类中有构造函数吗?

    对于一个问题,我们在给出答案的同时,也要说明理由,接着拿代码验证理由。

    抽象类是不能创建对象的,所以不需要构造函数。之前说过只要类一定义,都有默认构造函数。不能创建对象,要构造函数有什么用?虽然不能创建对象,但是抽象类有子类,其实抽象类中的构造函数可以给其子类对象进行初始化。(有子类就意味着继承,那么实例化过程还有么,父类必须要有空参数构造函数的,这里抽象父类中都没有构造函数。)

    就是说,一个类的构造函数既可以给本类对象初始化,也可以给子类对象进行初始化。

    答案是有,用于给子类对象进行初始化。

    2. 抽象类可不可以不定义抽象方法

    可以的。

    为什么呢?抽象类里面一个抽象方法都没有,那么搞抽象类有什么意义?

    有,很少见。目的就是为了不让该类创建对象。抽象类不能创建对象是由这个原因造成的?

    这种类怎么表现不重要,后面会重点讲解。

    通常这个类中的方法,有方法体,但是却没有内容。就是说{}里面为空,如下图所示。

    判断是否有方法体,就看有无{},其实里面还是有内容的,就是return,但是隐式了。它和直接用();表示是两码事。

    一个是有方法体,没内容。另一个是没有方法体。

    上面截图中的类,创建对象,调用show1(),和show2()没有意义。没内容,运行起来有啥用?所以这种类一般都是抽象的。

    后期会讲到为什么会有这种类,(联想之前的犬科,吼叫)。

    3. 抽象关键字不可以和哪些关键字共存?
    private不行,以下图为例,在方法的抽象关键字前面加上一个private。我觉着应该是不可以的,私有是不向外提供的,但是抽象类是要和外界联系的,因此不能加private(个人猜测)。

    道理很简单,抽象方法是要被覆盖,一私有的话,子类就不知道了,不知道就不能覆盖了。因此不能和private连用(这也说明在抽象类中的抽象方法中,覆盖是很重要的概念。) DOS报错如下,

     

    明明告诉我抽象需要覆盖,现在又把它隐藏起来,那还怎么覆盖。

    static不行,这里说的不能和抽象关键字连用,抽象关键字都是在修饰方法。(抽象关键字修饰三种东西,类,方法,变量,这里没有交代清楚前提)

    如果这成员变静态,还需要对象吗?就不需要了(静态意味着可以通过类调用,而不需要对象来调用)。大家都知道抽象方法运行没有意义,因为没有方法体,运行它干嘛,做什么运算都不知道。所以静态和abstract也不能共存。(这里的解释说明一点,只要是static标注的,就意味类要进行类名的调用方法。)

    final不行,下面两种截图都是不可以的,一个是与覆盖冲突(有了final修饰类,那下面就没有子类的方法来覆盖了),一个是与其子类冲突(没有子类来继承)。

    4. 抽象类和一般类有什么异同点

    不要以为抽象类很特殊,抽象类和一般类是一回事。都是描述事物的,一般类有足够的信息来描述事物,而抽象类信息不足。

    既然是抽象的,那当然也就不能建立对象。

    5. 抽象类一定是个父类吗?
    是的,抽象类要使用的话,必须通过通过子类对其抽象方法进行覆盖(对其进行抽象方法实现),不然用不了。

    上述这些都是从抽象类的角度来讲解的一些问题,但是是否一定有抽象类,都不一定。

  • 相关阅读:
    http返回码
    WCF 超时
    MVC异步
    熔断设计模式
    JAVA学习图
    java io模型
    keep alive 长连接
    Java异常处理 误区
    架构的本质
    Repository模式
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/7753434.html
Copyright © 2011-2022 走看看