哈喽,各位小伙伴们好,我是喵手。
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流 学 习,互相学习,才能成长的更快,对吧。
我是一名java开发,所以日常接触到最多的就是java啦,所以我趁自己有空,就来好好回忆,把自己学到的会的,进行输出,不图什么有回报,只想能帮助到更多的小伙伴,就好。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对喵手我创作道路上最好的鼓励与支持!
一、概述
论前几期啊,我们是分别讲了Object类、Date类、FormDate类、Calendar类、System类及StringBuilder类,不知道大家掌握的如何,如果没有及时巩固的同学,可以看我这里,我给大家罗列了下,快速学习通道,只希望能帮助到大家更好的学习与成长,这就是我写作的初衷。
- java之Date类讲义
- java之DateFormat类讲义
- java之Calendar类讲义
- java之System类讲义
- java之StringBuilder类讲义
- java之Collection类
- java之包装类
- java之Iterator迭代器
- java之List集合
二、前言
我们熟知在面向对象编制中,所有的对象都是通过类来描述的,但是,并不是所有的类都是此作用(描述对象),存在一种类中不包含足够信息来描述一个具体对象,像这种它就被称之为抽象类。今天我们不为别的,就是想带着大家来学习一下抽象类,希望大家都能有个好的理解方式。
三、本期教学目标
- 掌握抽象类概念
- 抽象类使用原则
- 抽象类使用限制
- 抽象类特点
- 抽象类实例演示
- 总结
四、正文
1️⃣概念
虽然前言可以大致介绍了抽象类的基础概念,但是描述的不是很全面,这里着重再给大家普及一下,抽象类:是一种在普通类的结构里增加抽象方法的组成部分。而且在java中若一个没有方法体的方法则得被定义为抽象方法,若一个类中存在抽象方法,那此类必定为抽象类。
具体定义比如如下:
public abstract class AbstractDemo { }2️⃣使用原则
针对抽象类,它不能被实例化,为什么呢?因为抽象类里的抽象方法是没有抽象方法体的,如果能被实例化,那意味着这个类有方法有属性,而恰恰抽象类是不带有的。
其次抽象类必须要用abstract关键字修饰,且抽象方法必须为public或者protected,如果定义为私有的,那么该类被子类继承,私有方法则不允许重写。默认是public。
对于抽象类,必须要有子类,用extends继承,一个类只能继承一个抽象类。对于子类不是抽象类的话,必须重写抽象类中的所有方法。
如下我给大家实例演示一下,你们就能理解了。
父类:AbstractDemo.java
public abstract class AbstractDemo {public void eat(){
System.out.println("我会吃!");
}
public abstract void run();
public abstract void dump();
}
若子类是个普通类继承AbstractDemo,则必选实现所有父类抽象方法。
子类1:AbstractDemo1.java
public class AbstractDemo1 extends AbstractDemo {//重写父类的抽象方法
@Override
public void run() {
System.out.println("我会跑!");
}
@Override
public void dump() {
System.out.println("我会跳!");
}
}
如果子类依旧是个抽象类,那么如果一个方法只重写一个方法,另外方法则必须要用abstract修饰,因为子类2有抽象方法,则子类2也不能被实例化。
子类2:AbstractDemo2.java
public abstract class AbstractDemo2 extends AbstractDemo {//重写父类的抽象方法
@Override
public void run() {
System.out.println("我会跑!");
}
public abstract void dump();
}
3️⃣使用限制
考大家一个问题,抽象类它有构造方法吗?这个是有的,因为抽象类中有属性,抽象类与普通类的区别只是有抽象类有抽象方法,而普通类没有,所以这些属性一开始就得被初始化。
给大家举个实例演示一下:
public abstract class AbstractDemo {public AbstractDemo(){
System.out.println("这是抽象类的构造方法");
}
public abstract void run();
public abstract void dump();
}
接下来定义一个子类继承父类抽象类,大家请看。
public class AbstractDemo1 extends AbstractDemo {public AbstractDemo1(){
System.out.println("这是子类的构造方法");
}
//重写父类的抽象方法
@Override
public void run() {
System.out.println("我会跑!");
}
@Override
public void dump() {
System.out.println("我会跳!");
}
}
如上,是完全可以定义构造方法的,那接下来我们定一个main主函数,实例化AbstractDemo1,我们来看看,它会执行那些步骤?
大家请看:如下截图
发现父类及子类构造方法都执行了,这就说明抽象类中的构造方法就是用来初始化的。
注意: 抽象类不能被final关键字修饰,
4️⃣特点
对于抽象类,我们来总结下它有何特点吧。
- 抽象类和抽象方法必须被[ abstract ]关键字修饰。
- 抽象类中不一定只有抽象方法,带有抽象方法的类一定是抽象类。
- 对于抽象类不能实例化这个特点,抽象类应该按照多态通过子类对象进行实例化,这就叫做抽象类多态。
- 对于抽象类的子类:第一:要么子类是抽象类。第二:要么重写掉抽象类中所有的抽象方法;(任何子类必须重写父类的抽象方法,或者声明自身为抽象类)
6️⃣总结
基本的概念及实例演示,我都在上边给大家做了讲解及演示,接着我就为此进行一个完整的复盘吧,也希望你们在看完这篇过后,能有个基本的理解,更多的还是得要日常实践中,去摸索。
... ...
好啦,以上就是本期内容的全部教学内容啦,如果对文中的任何知识点有疑问,欢迎评论区评论留言呀,我看见都会一一解答的。
五、文末
教学是结束了,但是有些话不知我但讲不当讲,啊哈哈, 可我还是想说给你们听听。如下是我很喜欢的一句话,我打算送给你们,希望我们都能变得更好更优秀。
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
-------------------------------------------
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
-------------------------------------------