Java抽象类和接口

来源:互联网 发布:内蒙古出版社 知乎 编辑:程序博客网 时间:2024/05/22 07:57

前天老师讲解类的继承、抽象类和接口突然被启发,以前总是用抽象类、接口、和继承什么的,没有思考过,为什么要这么设计,于是就上网查了查,做了做总结。

抽象类

首先,Java的三大特性:封装、继承、和多态,抽象类这里肯定会用到继承的,那么把类变成抽象类有什么作用呢?
**1.可以完成所有子类的共性行为。
2.可以规定子类必须完成的行为。**
下面我们来看看如果父类不是抽象类会出现什么样子:

class A {    public A()     {        System.out.println("A");    }}class B extends A {    public B()     {        System.out.println("B");    }}class C extends B{    public C()     {        System.out.println("C");    }}class D extends C{    public D()     {        System.out.println("D");    }}测试类:public class Test {    public static void main(String [] args)    {        new D();        /**         * 此处只想生成一个对象         * 实际确把ABCD四个对象都放在内存了         */    }}

这里写图片描述
如果不使用抽象类的话,太消耗内存,很明显是不行的,。
那么抽象类到底是什么呢?通俗来讲,抽象类是对类的抽象,它不需要定义详细的动作执行过程,只需要定义这个动作就可以了,这也是抽象类存在的必要性之一。例如:一个动物类,动物都有eat方法(动作),但是动物的子类,老虎和猫,老虎是大口吃,猫是小口吃,这就不归它管了。
抽象类的特征:

1.抽象类不能被实例化。    一个动物你能怎么实例化,一颗植物也不能实例化。不可能说:我实例化一个动物,到底什么动物啊?2.抽象方法必须被子类重写。    抽象方法就是从子类集合中提取出来的,也就是说,你继承这个类,你就必须满足要求。3.一个类包含抽象方法,那么这个类一定是抽象方法。

接口

为什么要设计接口呢?接口就是对象方法特征的集合。接口是被实现的,类是被继承的。继承只能是一个,接口可以实现多个。例如:
一个抽象类动物,它的子类有猫和猪,他们都继承动物类。再来定义一个上树动作(方法),猫类可以实现这个动作,但是猪就不能实现这个动作,所以上树的动作是不可以放在抽象类动物中的。这里上树的这个动作就可以当做一个接口。但是这里的接口中的上树动作却没有详细定义的。猫实现上树接口是爬上去的,鸡实现上树接口是飞上去的。(接口是一个特殊形式的抽象类)
特征:实现接口的具体类必须要实现接口中的所有方法和属性(怎么实现你随便)。实现接口的抽象类会把未实现的方法,改成抽象方法。

抽象类和接口的区别

从实际对象来看:
抽象类:从对象中提取出他们的属性和方法,制作出的一个集合。(发现)
这里的方法是每个子类都必须实现的,或者说,都共有的,但是没有详细执行过程。
接口:指定一个动作,如果有哪个对象可以完成这个动作就可以实现。(创造)
这里的动作同样没有详细执行过程。比如说:飞这个动作,蚊子可以飞,超人也可以飞。但是他们飞的动作是不一
样的,蚊子是翅膀飞,超人是超能力飞。

抽象角度:        抽象类是对类的抽象。        接口是对行为的抽象。共同点:        1.都不能被实例化。        2.都包含抽象方法。
0 0
原创粉丝点击