【JavaSE】抽象类与接口(上篇)

简介: 【JavaSE】抽象类与接口(上篇)

✨hello,进来的小伙伴们,你们好呐!✨

✈️✈️系列专栏【JavaSE】

🚜🚜本篇内容:JavaSE部分的抽象类与接口的概念初篇(对准知识点阅读喔!)

🍊🍊作者简介:一名大二即将升大三的科班小白,我很平凡,学会努力!

🍱🍱码云存放仓库gitee:https://gitee.com/king-zhou-of-java/java-se.git

一、抽象类

🍊一、概念

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

🍼比如:Animal类是动物类,在这个类中定义一个方法bark(),但由于Animal不是一个具体的动物,因此其内部的方法bark()无法具体实现。Dog是动物,继承Animal类,由于Dog是动物,狗叫汪汪汪,可以实现bark()方法。因此Animal类可以设计为抽象类。

972c9c70cbfd4525ba6388420afba0d3.jpeg 🍊二、抽象类语法

在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现体。🥞🥞

   // 抽象类:被abstract修饰的类

   public abstract class Demo2 {

       // 抽象方法:被abstract修饰的方法,没有方法体

       abstract public void eat();

       abstract public void drink();

       // 抽象类也是类,也可以增加普通方法和属性

       public String name;

       public String color;

       public void doclass(){

           System.out.println("做作业");

       }

🍊三、抽象类特性

🍓1. 抽象类不能直接实例化对象。

   public static void main(String[] args) {

       Demo2 de = new Demo2();//抽象类不能直接实例化对象

       }


c06b61f2299a4bc390879f1935f04cf3.png

c06b61f2299a4bc390879f1935f04cf3.png

我们发现,如果尝试实例化对象,编译器会自动报错!

🍔2. 抽象方法不能是 private 的。

abstract private void nice();//抽象方法不能是private的

646853a1bc1d478484b14c7c8ade1347.png

注意:抽象方法没有加访问限定符时,默认是public。

🍇3. 抽象方法不能被final和static修饰,因为抽象方法要被子类重写。

abstract public final void methodA();//抽象方法不能被final static 修饰

1f75b6389e20444d91362f40cf8b232e.png

🍬4.抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修饰 。

情况1:我们实现父类的eat()方法,Cat子类可以不用定义成abstract类型。

   public abstract class Demo2 {

       abstract public void eat();

       public String name;

       public String color;

       class Cat extends Demo2{

           public void eat(){

               System.out.println(name+"猫吃鱼");

           }

       }

情况2:我们只继承父类,但不重写eat()方法。(编译器会报错)

e964eec485d744b8bba5f87477040abf.png

解决方法:将Cat类型定义成abstract类型。

eeb4227eafd9465ba74870047cf27651.png

   🍼🍼重要结论:

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

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

🍊四、抽象类的作用

   🍮🍮在实际工作中,当需求不应该由父类完成, 而应由子类完成. 那么此时如果不小心误用成父类了, 使用普通类编译器是不会报错的. 但是父类是抽象类就会在实例化的时候提示错误, 让我们尽早发现问题。

   🍤🍤学会充分利用编译器的功能,使得开发过程更加的方便,安全!

💝OK,那么本篇到此告一段落,先给大家简介一下抽象类的概念,下一篇博客我将详细讲解接口的概念已经使用,感谢阅读,期待一键三连!🌯🌯

相关文章
|
10月前
|
JavaScript 前端开发 算法
🚀【程序员必备】Qwerty Learner:打造英语输入与单词记忆的神器
Qwerty Learner 是一款专为键盘工作者设计的开源软件,结合单词记忆与英语输入练习,提升英语水平和打字速度。内置丰富词库(如 CET-4/6、GRE、编程API等),提供音标发音、默写模式、速度正确率统计等功能,适合学生、职场人士及程序员使用。
4838 17
|
监控 DataX
DataX教程(09)- DataX是如何做到限速的?
DataX教程(09)- DataX是如何做到限速的?
1060 0
DataX教程(09)- DataX是如何做到限速的?
|
安全 Java Android开发
Eclipse Paho MQTT客户端Java源码分析
Eclipse Paho MQTT客户端Java源码分析
728 0
Eclipse Paho MQTT客户端Java源码分析
|
存储 网络安全 开发工具
iOS如何上传自己的sdk到cocoapods并用pod管理
在Github上创建存储库(前提是得有一个Github账号,如果没有就注册一个)
702 0
iOS如何上传自己的sdk到cocoapods并用pod管理
|
消息中间件 数据格式 Python
一文读懂Python进程间通信的几种方式
为什么进程之间需要通信? 1.数据传输 一个进程需要将它的数据发送给另一个进程; 2.资源共享 多个进程之间共享同样的资源;
|
算法
括号匹配那个小题真不简单……
括号匹配那个小题真不简单……
265 0
括号匹配那个小题真不简单……
|
SQL 安全
35分钟了解sql注入-盲注(三)
🍀学习sql注入之盲注操作
765 0
35分钟了解sql注入-盲注(三)
|
IDE NoSQL 前端开发
C语言学习——IDE软件Code::Blocks教程
C语言学习——IDE软件Code::Blocks教程
1467 0
C语言学习——IDE软件Code::Blocks教程
|
架构师 Java API
第03篇:Validation参数校验, 鸡肋鸡肋食之无味
非常好用的Spring 奇淫技巧,用了都说好。他可以让你的数据校验逻辑, 写的非常分散, 而分散的数据校验逻辑,往往会带跟多的用人成本。非常的nice,架构师一定要掌握。哎对了,你不会还不知道吧?
478 0
第03篇:Validation参数校验, 鸡肋鸡肋食之无味
|
数据安全/隐私保护 虚拟化 Windows