抽象类的学习与总结

简介: 抽象类的学习与总结

1.抽象类

1.1概念

如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

举例:

  • 蔬菜
  • 动物
  • 水果
  • 形状

1.2语法

abstract class Shape {
    public abstract void draw();//可以不写方法体,也可以写
    /*public void draw() {
        System.out.println("画图形");
    }*/
}
public class Test4 {
    public static void main(String[] args) {
        //Shape shape = new Shape();//抽象类 ,抽象类不能被实例化
    }
}

抽象类也属于类,内部可以包含普通方法和属性

既然抽象类不能被实例化,那么抽象类被用来做什么呢?

答:继承


1.3特性

1.3.1抽象方法不能被private,final,static修饰

因为抽象是指事物的共性被抽离出来,是一个概念而非具体的实现

具体的实现是由继承它的子类去完成的

当用private,final,static修饰抽象方法,子类就不能够重写draw方法了


1.3.2抽象类必须被继承,并且继承后子类要重写父类中的抽象方法

abstract class Shape {
    public  abstract void draw();
    /*public void draw() {
        System.out.println("画图形");
    }*/
}
class Rect extends Shape {
    @Override
    public void draw() {
        System.out.println("画矩形");
    }
}
class Circle extends Shape {
    @Override
    public void draw() {
        System.out.println("画圆形");
    }
}
class Flower extends Shape {
    @Override
    public void draw() {
        System.out.println("❀");
    }
}

1.3.3抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类

此时的Cat类是一个普通类,不能包含抽象方法


1.3.4抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量

abstract class Shape {
    public Shape() {
    }
    public  abstract void draw();
    /*public void draw() {
        System.out.println("画图形");
    }*/
}
class Rect extends Shape {
    public Rect() {
        super();//抽象类的构造方法
    }
    @Override
    public void draw() {
        System.out.println("画矩形");
    }
}

1.4抽象类的作用

抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类.。然后让子类重写抽象类中的抽象方法。

那普通的类也可以被继承,普通的方法也可以被重写,为什么一定要用抽象类和抽象方法呢?

答:用抽象类相当于多了编译器检验

如图:

当子类没有重写draw方法时,编译器会报错

当类为普通类时就不会报错

这是因为抽象类的主要作用是被继承

相关文章
|
机器学习/深度学习 传感器 人工智能
揭秘 5G+AI 时代的机器人世界!七大核心技术改变人类生活!
AI 和 5G 与机器人技术结合,正在不断催生新的消费电子品类。AI 解决机器理解世界,以及人机交互的问题。5G 拓展机器人的活动边界,并为机器人提供更大的算力和存储空间(云协作机器人) 。
1816 0
揭秘 5G+AI 时代的机器人世界!七大核心技术改变人类生活!
|
关系型数据库 MySQL 调度
MySQL · RocksDB · Memtable flush分析
概述 首先我们知道在RocksDB中,最终数据的持久化都是保存在SST中,而SST则是由Memtable刷新到磁盘生成的,因此这次我们就主要来分析在RocksDB中何时以及如何来Flush内存数据(memtable)到SST.
3834 0
|
Serverless
Aliyun Serverless VSCode Extension v1.11.0 发布
Aliyun Serverless VSCode Extension 是阿里云 Serverless 产品 函数计算 Function Compute 的 VSCode 插件,该插件结合了函数计算 Fun 工具以及函数计算 SDK ,是一款 VSCode 图形化开发调试函数计算以及操作函数计算资源的工具。
1403 0
|
Web App开发 监控 Python
|
5天前
|
存储 人工智能 安全
AI 越智能,数据越危险?
阿里云提供AI全栈安全能力,为客户构建全链路数据保护体系,让企业敢用、能用、放心用