Java中的抽象类

  • 抽象类
    抽象类无法实例化、无法创建对象
    1、例图:
    在这里插入图片描述
    2、什么是抽象类?
    类和类之间具有共同特征,将这些共同特征提取出来,形成的就是抽象类。类本身是不存在的,所以抽象类无法创建对象(无法实例化)。
    3、抽象类属于什么类型?
    抽象类也属于引用数据类型
    4、抽象类怎么定义?
    语法:
[修饰符列表] abstract class 类名{
            类体;
        }
  • 抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被子类继承的。
  • final和abstract不能联合使用,这两个关键字是对立的。
  • 抽象类的子类可以是抽象类。抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的。
  • 抽象类关联到一个概念:抽象方法。什么是抽象方法呢?
    1、抽象方法表示没有实现的方法,没有方法体的方法。
    例如:public abstract void dosome ();
    2、抽象方法特点是:
    特点1:没有方法体,以分号结尾
    特点2:前面修饰符列表中有abstract关键字
    3、抽象类中不一定有抽象方法,抽象方法必须出现在抽象类中。
  • 抽象类作用降低接口实现类与接口之间实现难度。
    例子:抽象类里面实现了接口中不想要的,然后让子类继承,子类就可以不用实现那些不想实现的。
    使用规则:
    1、抽象类可以声明抽象方法,也可以生成具体方法。
    2、抽象类声明抽象方法必须由子类进行重写。
    3、抽象类实现接口时,不需要对接口方法进行重写。
    4、抽象类有构造方法,但是不能使用。
  • 重要结论:
    1、一个非抽象的类继承抽象类,必须将抽象类中的抽象方法实现了。(将从父类中继承过来的抽象方法进行覆盖/重写,或者也可以叫做“实现"。)
    2、代码例子:
package com.zyh.abstractTest;

abstract class Animal {
    public abstract void move();
}
package com.zyh.abstractTest;

class Bird extends Animal{
    public void move(){
        System.out.println("flying");
    }
}
package com.zyh.abstractTest;

public class Test {
    public static void main(String[] args) {
        Animal a = new Bird();//向上转型
        //这就是面向抽象编程.
        // 以后你都是调用的a.xxxx,a的类型是Animal;
        // Animal是抽象的,面向抽象编程,不要面向具体编程;
        // 降低程序的耦合度,提高程序的扩展力;
        // 这种编程思想符合0CP原则.
        a.move();
    }
}
  • 判断题:Java语言中凡是没有方法体的方法都是抽象方法
    (错误)
    object类中就有很多方法都没有方法体,都是以";"结尾的,但他们都不是抽象方法,例如:public native int hashcode();这个方法底层调用了c++写的动态链接库程序。前面修饰符列表中没有: abstract。有一个native。表示调用JVM本地程序。
posted @ 2020-04-04 17:19  YU_UY  阅读(292)  评论(0编辑  收藏  举报