【JavaSE系列】第十节 —— 带你吃透抽象类

news/2024/7/8 1:55:51

(6)当一个抽象类 继承一个抽象类的时候,可以不用来重写 当作父类的那个抽象类的抽象方法:提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、抽象类的概念

二、抽象类的语法

 三、抽象类的特性

四、抽象类的理解

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

总结


前言

今天我们将进入到Java中有关抽象类的概念,抽象类是属于类的一种,在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());
    }
}

代码示例结果: 

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

 


总结

今天有关抽象类的学习就到这里了,今天我们也将结束Javase的学习,接下来就让我进入到Javases的学习当中吧!!!!!!!!!我们下个内容再见哦!!!!


http://lihuaxi.xjx100.cn/news/633561.html

相关文章

数据结构(2)树状数组

活动 - AcWing 参考:《算法竞赛进阶指南》-lyd 目录 一、概念 1.主要功能 2.实现方式 3. 二、例题 1.树状数组和逆序对 2.树状数组和差分 3. 两层差分 4. 结合二分 一、概念 1.主要功能 树状数组可以完成的功能主要有: 维护序列的前缀和单…

唤醒手腕 Go 语言开发学习笔记(基本简介、环境安装、基础知识)

1. Go语言简介 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收&#xf…

研究发现,大多数长期 COVID 影响在感染后一年内消退

英国医学杂志今天发表的一项来自以色列的大型研究发现,轻度 COVID-19 感染后出现的大多数症状或病症会持续数月,但在一年内恢复正常。 特别是接种过疫苗的人,呼吸困难的风险较低。这通常也是轻度感染后最常见的影响。相比之下,比未…

Java线程的六种状态

前言:其实线程的状态在操作系统的PCB中就对其进行了描述,但是Java中觉得自带的状态并不是特别好,于是引入了线程在Java中的六种状态。 (1) NEW 安排了工作还未行动,即:Thread对象创建出来了,但是内核的PCB…

一文读懂Go Http Server原理

hello大家好呀,我是小楼,这是系列文《Go底层原理剖析》的第二篇,依旧是分析 Http 模块,话不多说,开始。从一个 Demo 入手 俗话说万事开头难,但用 Go 实现一个 Http Server 真不难,简单到什么程度?起一个 Server,并且能响应请求,算上包名、导入的依赖,甚至空行,也就…

Java多线程:线程的优先级 || 线程的中断 || 线程的分类 || 线程的定时器

Java多线程:线程的优先级 || 线程的中断 || 线程的分类 || 线程的定时器 每博一文案 正如村上春树所说:“当暴风雨过去,你不会记得自己是如何度过的,你甚至不确定,暴风雨是否真正结束了, 但你已不再是当初…

Java异常情况了解

作者:爱塔居的博客_CSDN博客-JavaSE,数据结构领域博主 专栏:JavaSE 作者介绍:大三学生,希望一起进步~ 文章目录 目录 文章目录 一、异常结构体系 二、异常分类 三、异常处理 3.1异常抛出 3.2 异常捕获 四.【面试题】 五、题目练习…

Consensus Algorithm -- Raft

The Raft Consensus Algorithm Go 实现:etcd/raft、dragonboat Rust 实现:TiKV C 实现 :nebula-graph-storage、 RethinkDB、logcabin 拜占庭将军问题 拜占庭将军问题(Byzantine failures),是由莱斯利兰…