抽象类:顾名思义就是比较抽象........的类......
记住一句话:每一个技术的出现都是为着解决某一个问题的。
因此,在学习的过程中,多思考如何解决某一个问题,从一个设计者的角度出发,能够让我们更容易理解技术的本质。剩下的无非就是一些制式的规则和运用罢了。
一、为什么会有抽象类?
抽象类是在继承的基础上延伸出来的设计。假设有:父类Animal,子类有Dog和Cat。
Dog属性:年龄,颜色 行为:吃骨头
Cat属性:年龄,颜色 行为:吃小鱼干
那么我们现在就可以抽取共同属性和共同行为到父类中,构建一个继承体系如下:
但是这里有一个问题:就是抽取eat方法的时候,方法体里面应该写什么?
请问写吃什么?
吃骨头?那Cat要重写eat方法
吃小鱼干?那Dog要重写eat方法
不对!乱套了!冥冥中蛋疼的感觉!这个改那个不改的,一旦子类多起来不就乱套了他奶奶的?
怎么办?写这个也不行,写那个不行,我不写行不行?
嗯!对了,就是不写方法体!
什么都没有,不就是抽象吗?
这就是抽象的来由。
所以:不写方法体的方法叫做抽象方法,而写有抽象方法的类叫做抽象类
同时:有抽象方法的类一定是抽象类,但是抽象类不一定有抽象方法
二、抽象类、抽象方法的定义格式
抽象类:public abstract 返回类型 类名 { }
抽象方法 public abstract 返回类型 方法名 (参数类型);
三、在抽象类的父类中,可以有构造方法。
怎么理解?抽象类只是对于抽象方法而言,就是多了一个abstract而已,其他的内容和我们之前书写JavaBean是一样的。
四、抽象子类的继承:
有两个选择:
1、要么子类必须也是抽象类才能继承抽象父类,即父类是抽象类,子类也必须是抽象类
2、要么子类需要重写父类所有的方法
注意:抽象类不能实例化,不能实例化不能创建对象
但是我毕竟是要创建对象的,不能创建对象那我还写个锤子代码?
所以,要创建对象,就只能重写方法
这下相当于强制重写方法
这有什么意义呢?
意义:
试想,我们写一个大的项目的时候肯定不是一个人写的,而是很多人一起合作。
每个人的想法不一样,例如说一个eat方法,甲认为既然是吃东西,吃的不一样,就要传参数;
而乙认为不需要,那就会导致书写的eat方法不一致。
调用简直蛋疼,你还要去看人家写的是什么你才能决定用不用。
但是,如果都抽取为抽象方法,那么,你就不需要去看别人写的代码,
直接重写,按照你自己的意思去写,后面无论是谁来用都是如此。
不乱,方便,舒坦!