IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【JavaSE系列】第十话 —— 一篇文章带你吃透抽象类 -> 正文阅读

[Java知识库]【JavaSE系列】第十话 —— 一篇文章带你吃透抽象类

?目录?

? 🍚前言

? ? ? 🧀思维导图

? ? ? ? ? 🥡一、抽象类的概念

? ? ? ? ? 🧇二、抽象类的语法

? ? ? ? ? 🍰三、抽象类的特性

? ? ? ? ? 🍔四、抽象类的理解

? ? ? ? ? 🥩五、总结一下抽象类所需要的注意点

? 🍤写在最后


前言

? ? ? ?继Java的三大特性(封装、继承、多态)过后,咱们就开始介绍一个新的概念——抽象类;

? ? ? ?接下来让我们一起去看看吧......


思维导图


一、抽象类的概念

? ? ? ?在面向对象的概念中,所有的对象都是通过 类 来描绘的;

? ? ? ?但是,并不是所有的类 都是用来描述对象的;

? ? ? ?如果一个类中 没有包含足够的信息 来描绘一个具体的对象,那么 这样的类 我们就把它叫做 抽象类

? ? ? ?比如:


二、抽象类的语法

? ? ? ?在Java中, 一个类如果被 关键字abstract?修饰,则称这个类为 抽象类;

? ? ? ?抽象类中 被 abstract 修饰的方法称为 抽象方法,抽象方法不需要给出具体的方法体;

//Shape类 称为抽象类
abstract class Shape {
    
    public abstract void draw();    //draw方法 称为抽象方法
    
}

【注意】抽象类也是类,里面可以包含 成员变量和成员方法,甚至构造方法。


三、抽象类的特性

(1)抽象类 不能实例化对象(指的是不能实例化自己的对象)

这个很容易理解:

? ? ? ?因为从抽象类的概念 我们可以得知,抽象类 不可以完整的描述 一个对象;

? ? ? ?那么当然不可以实例化对象了。

? ? ? ?如果实例化的不是自己的对象,那么可以去实例化(不可以实例化张三的对象,关于我李四什么事......):

(2)abstract修饰的 抽象方法 不能被final修饰,因为被abstract修饰的方法必须要重写,被final和static修饰的方法必须不能重写;当然,final也不可以修饰抽象类;它们是天敌,咋可能出现在一起嘛:

?

(3)抽象方法不可以被static修饰 (这个是重写的规则):

(4)抽象方法是不可以用private修饰的:

【注意】如果抽象方法没有加 访问修饰限定符时,默认是public。

(5)抽象类当中不一定有抽象方法,但是如果这个方法是抽象方法,那么这个类一定是抽象类:

但反过来,有抽象方法的类 一定是抽象类,这个是毫无疑问的。

(6)当一个抽象类 继承一个抽象类的时候,可以不用来重写 当作父类的那个抽象类的抽象方法:

? ? ? ?那么,有没有一种无限套娃的可能;

? ? ? ?要记住,“出来混,迟早要还的”;


四、抽象类的理解

? ? ? ?有的人就可能会特别的迷糊:

? ? ? ?别人告诉他,一个类,居然不可以实例化对象,那么这个类 还有什么意义呢 ?

给大家看一段代码:

? ? ? ?有的人可能会疑问:

? ? ? ?这个抽象类 怎么看起来和普通类 没有什么区别呢?都有成员变量和成员方法啊!

? ? ? ?其实,这些人说的没错;

? ? ? ?确实抽象类和普通类基本上没有什么区别;

? ? ? ?唯一的区别就是:抽象类 多了一个抽象方法,让这个类同时被abstract修饰,使得这个类不可以被实例化了;

? ? ? ?其他 在里面定义 成员变量、成员方法啥的 都和普通类一样。

? ? ? ?那么,回到最初的问题,抽象类 居然不可以被实例化,那么它存在的意义是什么呢?

? ? ? ?其实,抽象类 存在的最大意义是:为了被继承;

? ? ? ?当然,这个继承是有条件的:

? ? ? ?如果一个普通的类Cycle 继承了 抽象类Shape 之后,此时 必须得要重写 抽象类Shape 当中的所有的抽象方法(下面我只举了一个 只有一个抽象方法的例子):

?

? ? ? ?既然 抽象类的出现是 为了被继承,那么抽象类肯定是父类,

? ? ? ?即 可以引用所有继承它的子类对象;

? ? ? ?也就是说,抽象类也可以发生向上转型,进一步发生多态:

package Demo1;
//Shape类 称为抽象类
abstract class Shape {
    public String name;
    public int age;

    public void eat() {
        System.out.println("吃饭!!!!!!");
    }
    public void sleep() {
        System.out.println("睡觉!!!!!!");
    }
    //draw方法 称为抽象方法
    public abstract void draw();
}

class Cycle extends Shape {
    @Override
    public void draw() {
        System.out.println("○");
    }
}

class Rect extends Shape {
    @Override
    public void draw() {
        System.out.println("  ? ");
    }
}

class Triangle extends Shape {
    @Override
    public void draw() {
        System.out.println("△");
    }
}

class Flower extends Shape {
    @Override
    public void draw() {
        System.out.println("?");
    }
}

public class TestDemo1 {
    public static void drawMap(Shape shape) {
        shape.draw();
    }
    public static void main(String[] args) {
        Cycle cycle = new Cycle();
        Rect rect = new Rect();
        Triangle triangle = new Triangle();

        drawMap(cycle);
        drawMap(rect);
        drawMap(triangle);

        drawMap(new Flower());
    }
}

? ? ? ?代码示例结果:


五、总结一下抽象类所需要的注意点


写在最后

? ? ? ?怎么样,抽象类 是不是很简单;

? ? ? ?由于博主水平有限,可能会出现一些表达不清楚,或者出现一些其他的情况,

? ? ? ?欢迎各位铁汁们指出来,和博主一起改正,

? ? ? ?一起努力,共同进步;

? ? ? ?好了,如果这篇博客对铁汁们有帮助的话,可以送一个免费的 赞 嘛;

? ? ? ?当然,顺手点个关注是再好不过的了......

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-23 10:43:02  更:2022-04-23 10:44:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:00:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码