abstract抽象类与interface接口的区别

本人是从C++开发转到Android上的,虽说java和C++都是面向对象的,但还是有很大差别,刚开始接触abstract抽象类与interface接口时也只是知其然不知其所以然.所以在这里记录下学习的过程


abstract抽象类:

大家知道通过继承,可以从原有的类派生出新的类,原有的类称为基类或父类,而新的类则称为派生类或子类.通过这种机制,派生出的新的类不仅可以保留原有的类的功能,而且还可以拥有更多的功能.除了上述的机制之外,Java 也可以创建一种类专门用来当作父类,这种类称为“抽象类”.抽象类的作用有点类似“模版”,其目的是要设计者依据它的格式来修改并创建新的类,但是并不能直接由抽象类创建对象,只能通过抽象类派生出新的类,再由它来创建对象。

abstract定义格式:

abstract class 类名称      //定义抽象类
{
        声明数据成员; 

        访问权限 返回值的数据类型 方法名称 (参数 ...)
        {
        ...  定义一般方法
        }

        abstract 返回值的数据类型 方法名称 (参数 ...);
        //定义抽象方法,在抽象方法里,没有方法体
}

abstract定义规则:

1,抽象类和抽象方法都必须用 abstract 关键字来修饰

2,抽象类不能被实例化,也就是不能用 new 关键字去产生对象

3,抽象方法只需声明,而不需实现

4,含有抽象方法的类必须被声明为抽象类,抽象类的子类必须复写所有的抽象方法后才能被实例化,否则这个子类还是个抽象类



interface接口:

接口是java中所提供的一种非常重要的技术,用于实现多继承的一种机制同样在Android中也是运用的非常广泛,比如最常见的按钮响应接口OnClickListener等,他的结构和抽象类相似,也可以具有数据成员和抽象方法

interface定义格式:

interface接口名称
{
        final 数据类型 成员名称 = 常量 ;       
        //接口中数据成员必须赋初值,且此值不能再被更改,所以声明数据成员的关键字final可省略

        abstract 返回值的数据类型 方法名称 (参数 ...);
        //定义接口的回调方法, 接口中所有方法一定是抽象方法,所以关键字abstract也可以省略
}

interface 定义规则:

1,接口里的所有方法都是抽象的,只用做声明即可,不用实现

2,数据成员必须赋值,而且是不可改变的


好了,从以上abstract抽象类与interface接口定义的格式和规则就可以知道2者的不同和相似这处

既然已经有了抽象类,为什么还要引入接口呢

这里再次强调一下因为interface接口是java实现多继承的一种机制,java中一个类只能继承一个父类,但如果需要一个类继承多个抽象方法的话,就无法实现了,所以就出现了接口的概念.一个类只能继承一个父类,但是可以实现多个接口.




发布了21 篇原创文章 · 获赞 8 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/zhangxuebing2/article/details/18400251