首页 > 代码库 > java基础之抽象类
java基础之抽象类
java的继承说完后..让我们来了解了解抽象类...
我们之前说过,将一件事物抽象成具体属性和方法后,并将其封装就是类了.如下图
我们将人的名字,性别,以及睡觉的方法扔进了类Person中,(专业术语:封装成Person类)
发现没,虽然我是说将人的属性,方法抽象封装成类...但是,你没发现我们抽象得过于具体了吗?没发现?
我之前说的,将人的属性,方法抽象后封装进类里面,但是......你难道不觉得name名字,sex性别太过于具体了吗?还有就是.人的确有睡觉这个方法(行为),当是,,你直接就将其睡觉的方法定义成横着睡...这是不是......
所以我们可以这么说,Person这个类使我们抽象出来的东西具现化了.我们本来只是将属性抽象出来,但是现在我们却将他们初始化了,比如名字改为了TianYiLuo 性别改成了男...
所以说,我们应该将这个事物给高度概括一下...哦 我先提一下.在抽象类中.我们只负责方法(行为)的抽象,属性那个东西我们不管..至于为什么....太麻烦.没必要
来..让我们将人的方法(行为)来个高度抽象吧....人有什么方法呢..睡觉..吃饭好了 就暂时抽象这两个了...先声明..我不是只会吃饭睡觉蛤...我还会潜水...嘿嘿
抽象类跟我们之前见到的正常的类没什么区别..只不过实在类和方法前面添加一个abstract而已...看下图
这就抽象完了....是不是很简洁啊..抽象类跟普通类之前最主要的区别就是没有方法体..方法体就是大括号里面的内容,并且抽象类没有办法new对象...
将事物高度概括成抽象类之后...不要以为就没事儿了...事情还多呢....
别跟我说...你将封装成类之后就不管了...我之前不是说了的嘛..抽象类里面装的东西就是某类事物共有的方法...那啥来着...交集 ,所以我们要使用这个类的时候就要将其具体的方法描述出来...
那么该怎么描述呢....当然是用继承啦...看图
在这里,我们是用student这个类将Person里面的抽象方法给具体化.当然还可以用其他的类,只要是与Person(人)类有关的都可以,比如说worker(工人)teacher(教师)都可以,或许我举的例子不是很形象..我就简单的解释一下....想象一下,每个人都有自己的不同的行为,方法...比如说同是睡觉..我可以横着睡觉,侧着睡觉,站着睡觉,躺着睡觉..看,每个方法的具体过程都不同..但是依然是睡觉..所以我们可以将其定义成抽象类.
当然,这里要提醒一下,抽象类的子类必须将父类的方法全部具体化(复写)..否则,这个子类任然是抽象类..并且无法创建对象
所以使用抽象类的时候一定要注意将所有的方法都复写一次
使用抽象类的好处:
1.我们可以让程序具有更好的拓展性...这个后面将java多态的时候我会讲..
2.让程序的条理更加清晰,当我们使用抽象类后,无论子类是什么,我们都可以通过抽象类来大致看出子类的功能,比如说Person是抽象类,那我们就可以知道,其子类就是不同的人,如果Door是抽象类,其子类自然就是不同的Door(门)啦..
最后,我在来补充一个很容易被忽视的东西....关于权限修饰符的问题..我这里讲随便说说,java中权限的大小顺序是:
public > protected > default > private
如果父类的方法method1用public修饰,那么子类在继承并复写该方法的时候只能用public修饰.否则报错 我举个例子
在java中如果不加权限修饰符,则会使用默认的default权限,然后错误就发生了..使用低权限(default)覆盖高权限(public)的错误
一定要记住..高权限可以覆盖低权限....但是低权限不能覆盖高权限...我下面用图说明
..吐槽一句...Windows自带画图工具用不来.....
java基础之抽象类