抽象类与接口的异同

抽象类和接口是java中非常重要的两个概念,是java多态的基础,在java的设计模式中他们无处不在,为了归纳记忆,我们总结下抽象类和接口的相同和不同之处。

我们先说说他们各自的特点:

     接口:

     1、接口不是一个类,这点从声明就可以看出来声明关键字为interface 而类的声明是class,但是接口是一种抽象类型。

     2、接口不能被实例化,因此接口中也不能有构造器。

     3、接口中的方法默认是public abstract 类型的,且不能由其他private 等修饰符修饰。

     4、接口中的方法如果不是static类型的,那么方法必须是抽象的不能有方法体,但是一般不在接口中直接定义静态方法去执行代码块。

     5、接口中可以声明变量,默认的是public static final的,因此是不能修改的。

     6、接口中不能用this表类当前类对象。

     7、接口可以多实现。

    抽象类:

     1、抽象类是一个类,用abstract修饰,用来声明该类是一个抽象的类。

     2、抽象类本身不可以实例化,但可以声明构造器,用于继承它的子类初始化时初始化(如果要用new 抽象类必须要重写重写方法的实现)。

     3、抽象类型既可以有抽象方法,也可以有非抽象的方法,抽象方法需要用abstract修饰,没有具体实现,没有方法体。

     4、抽象方法只能单继承。

 

     由此我们基本上可以总结出接口和抽象类的异同:

     异:

     一:声明方式不同:抽象类用abstract修饰,接口用interface修饰。

     二:方法声明不同:抽象类中既可以有抽象方法,也可以有非抽象方法;而接口中方法不能存在方法默认是public abstract的没有方法体,但是可以用static修饰后写方法体。

     三:变量声明不同:接口中的变量默认是public static final的,但是抽象类中不是。

     四:this使用不同:接口中不能使用this指向当前对象(接口不能被实例化所以没有this对象),抽象类中存在this对象。

    同:

     一:接口和抽象类都是一种抽象的表现形式。

     二:接口和抽象类都不能实例化。

     三:接口和抽象类中抽象方法都不能有具体实现。

posted @ 2017-03-08 11:10  迷途小码猿  阅读(225)  评论(0编辑  收藏  举报