抽象类与接口的异同

抽象类和接口是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对象。

同:

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

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

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

时间: 2024-08-22 01:38:48

抽象类与接口的异同的相关文章

抽象类和接口的异同

一.相同点 抽象类与接口都可以约束类的行为,是一些方法特征的集合,但是没有方法的实现.从这个角度来讲,接口可以看作一种特殊的"抽象类". 二.不同点 1.抽象类和接口采用完全不同的语法来表示,两者的设计理念也是不同的. 2.一个父类只能有一个直接父类,但可以通过implements实现多个接口. 3.抽象类利于代码复用,接口利于代码的扩展和维护. 4.对于继承抽象类的子类来说,符合is a 的关系,而对于实现接口的子类来说,符合has a 的关系.接口代表一种能力. 5.接口是公开的,

C#中抽象类和接口的异同

抽象类 通过在类定义前面放置关键字 abstract,可以将类声明为抽象类.抽象类不能实例化. 抽象类的用途是提供一个可供多个派生类共享的通用基类定义. 例如,类库可以定义一个抽象类,将其用作多个类库函数的参数,并要求使用该库的程序员通过创建派生类来提供自己的类实现. 抽象类可以包含非抽象的方法.属性以及抽象的方法.属性.抽象类和抽象方法都必须在派生类中用override进行重写. 抽象方法:抽象类也可以定义抽象方法. 方法是将关键字 abstract 添加到方法的返回类型的前面.抽象方法没有实

抽象类和接口的异同点

相同点: 都是不断向上抽取而来的. 不同点: 1,抽象类需要被继承,而且只能单继承.    接口需要被实现,而且可以多实现. 2,抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法.    接口中只能定义抽象方法,必须由子类去实现. 3,抽象类的继承,*是is a关系*,在定义该体系的基本共性内容.    接口的实现是 *like a 关系*,在定义体系额外功能. 举一个简单的例子: 犬按功能分:有导盲犬,搜爆犬. 1 abstract class 犬 2 { 3 abst

php抽象类和接口的异同【转】

1. 相同点: (1)      两者都是抽象类,都不能实例化. (2)      interface 实现类及 abstract class 的子类都必须要实现已经声明的抽象方法. 2. 不同点: (1)      interface 需要实现,要用 implements ,而 abstract class 需要继承,要用 extends . (2)      一个类可以实现多个 interface ,但一个类只能继承一个 abstract class . (3)      interface

三、抽象类和接口的对比-----《大话设计模式》

一.抽象类 c#允许把类和方法声明为abstract,即抽象类和抽象方法.抽象类不能实例化,抽象方法必须被子类重写,如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法. 抽象类拥有尽可能多的共同代码,尽可能少的数据. abstract class Animal //加abstract关键字,表明是抽象类 { -- protected abstract string getShoutSound(); //在方法返回值前加abstract表明此方法是抽象方法. -- //抽象

java基础知识回顾之抽象类和接口的区别

/* 抽象类和接口的异同点: 相同点: 都是不断向上抽取而来的. 不同点: 1,抽象类需要被继承,而且只能单继承. 接口需要被实现,而且可以多实现. 2,抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法. 接口中只能定义抽象方法,必须由子类去实现. 3,抽象类的继承,是is a关系,在定义该体系的基本共性内容. 接口的实现是 like a 关系,在定义体系额外功能. 犬按功能分:有导盲犬,搜爆犬. abstract class 犬 { abstract void 吼叫()

013_面向对象_抽象类和接口

1.抽象类(abstract) (1)特点 ①方法只有声明没有实现时,该方法就是抽象方法,抽象方法必须定义到抽象类中,该类也必须被abstract修饰 ②抽象类不可以被实例化,因为调用抽象方法没有意义. ③抽象类必须有子类覆盖所有的抽象方法,该子类才可以实例化,否则,这个子类还是抽象类 (2)常见问题 ①抽象类中有构造函数吗? 有,用来给子类对象初始化 ②抽象类可以不定义抽象方法吗? 可以.目的是不让该类创建对象,通常这个类中的方法有方法体,却没有内容 ③抽象关键字不可以和哪些关键字共存? pr

抽象类及接口详解

一.前言 在上一节中我们讲到抽象类和接口之间的异同,我们一起回顾下其异同. 同: 1.都不可以被实例化 2.都含有声明但未实现的方法 3.都可以被继承 4.其子类必须实现其声明未实现的方法 异: 1.抽象类是多继承,接口是单继承 2.抽象类可以包含实现的方法,接口不能包含实现的方法 3.接口支持回调,抽象类不支持 4.抽象类更多的定义在一些类关系紧密的类间,接口则定义在实现其某一种功能之间 抽象类和接口的异同我们再次熟悉了一遍,今天我们主要讲的是抽象类和接口使用场景及详讲抽象类的使用方法及接口的

java基础2:抽象类、接口与多态

关于Java基础的文章,我觉得写得还可以,以前发在了我其它的博客了,肯定是原创,现在再分享给大家出来. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------