抽象类和接口的对比

抽象类和接口的对比

参数 抽象类 接口
默认的方法实现 它可以有默认的方法实现 接口完全是抽象的。它根本不存在方法的实现
实现 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现
构造器 抽象类可以有构造器 接口不能有构造器
与正常Java类的区别 除了你不能实例化抽象类之外,它和普通Java类没有任何区别 接口是完全不同的类型
访问修饰符 抽象方法可以有publicprotecteddefault这些修饰符 接口方法默认修饰符是public。你不可以使用其它修饰符。
main方法 抽象方法可以有main方法并且我们可以运行它 接口没有main方法,因此我们不能运行它。
多继承 抽象方法可以继承一个类和实现多个接口 接口只可以继承一个或多个其它接口
速度 它比接口速度要快 接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。
添加新方法 如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。 如果你往接口中添加方法,那么你必须改变实现该接口的类。

什么时候使用抽象类和接口

  • 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
  • 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
  • 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

对于抽象类与抽象方法的限制如下: 

(1)凡是用abstract 修饰符修饰的类被称为抽象类。凡是用abstract修饰符修饰的成员方法被称为抽象方法。
 

(2)抽象类中可以有零个或多个抽象方法,也可以包含非抽象的方法。
 
(3)抽象类中可以没有抽象方法,但是,有抽象方法的类必须是抽象类。
 
(4)对于抽象方法来说,在抽象类中只指定其方法名及其类型,而不书写其实现代码。
 
(5)抽象类可以派生子类,在抽象类派生的子类中必须实现抽象类中定义的所有抽象方法。
 
(6)抽象类不能创建对象,创建对象的工作由抽象类派生的子类来实现。
 
(7)如果父类中已有同名的abstract方法,则子类中就不能再有同名的抽象方法。
 
(8)abstract不能与final并列修饰同一个类。
 
(9)abstract 不能与private、static、final或native并列修饰同一个方法。

时间: 2024-10-10 09:07:01

抽象类和接口的对比的相关文章

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

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

抽象类与接口对比

对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今天我们就一起来学习一下Java中的接口和抽象类.下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的实现.抽象

Java抽象类与接口的区别

很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题.本文我们将仔细讨论这些话题. 在讨论它们之间的不同点之前,我们先看看抽象类.接口各自的特性. 抽象类 抽象类是用来捕捉子类的通用特性的 .它不能被实例化,只能被用作子类的超类.抽象类是被用来创建继承层级里子类的模板.以JDK中的GenericServlet为例: public abstract class GenericServlet implements Servlet, ServletC

Java基础——抽象类和接口的关系

在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是并不是所有的类都能用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就应该被定义为抽象类. 抽象类 概述 比如,我们要描述"动物",它具有年龄.体积,会叫,能跑.但是又缺乏足够的特性(相较于阿猫,阿狗,它们都是动物,却有自己的特性),我们没有唯一的一种能够代表动物的东西(当然,这是相对于猫.狗来说的,在生物学上,动物还是有办法来定义的),这时我们可以用抽象类来描述它.当我们用某个类来具体描述&quo

[转]java抽象类和接口

很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题.本文我们将仔细讨论这些话题. 在讨论它们之间的不同点之前,我们先看看抽象类.接口各自的特性. 抽象类 抽象类是用来捕捉子类的通用特性的 .它不能被实例化,只能被用作子类的超类.抽象类是被用来创建继承层级里子类的模板.以JDK中的GenericServlet为例: 1 2 3 4 5 6 7 8 9 public abstract class GenericServlet implements

对比抽象类和接口

抽象类: (1)abstract关键字只能修饰类和方法,不能修饰字段. (2)抽象类不能被实例化(通俗点讲,不能被new),只能被继承. (3)抽象类可以包含属性,方法,构造方法,初始化块,内部类,枚举类,和普通类一样,普通方法一定要实现,变量可以初始化或不初始化,但是不能初始化后再在抽象类中重新赋值或操作该变量(只能在子类中改变该变量) (4)抽象类中抽象方法不能实现. (5)含有抽象方法的类必须抽定义成抽象类. 接口: (1)接口的成员常量和方法都必须是公开的(public),确保能被外部访

c#抽象类和接口的简单举例

1. 个性大于共性. 2. 差异较大的个性间具有某些相同的行为. 3. 相同行为的实现方式有较大区别. 给你三个对象,分别是鲫鱼.鲤鱼.金鱼,仍然让你设计基类来概括它们之间的联系,那么你第一个意识到的肯定是它们都属于鱼类,其次是他们游泳的方式可能稍有差异,这时就应当使用抽象基类而不是接口,对比着上面的例子,原因有三条: interface ISwim { void Swim(); } public class Person : ISwim { public void Swim() { //Swi

PHP中的抽象类和接口

PHP抽象类和抽象方法的应用 抽象类 接口 多态 抽象类是以特殊的类,接口是一种特殊的抽象类声明抽象类和接口,以及一些需要的技术抽象类:    什么是抽象方法?        定义:如果一个类中的方法,没有方法体的方法就是抽象方法(就是一个方法没有使用{}而直接使用分号结束)            function test();  //抽象方法            function test(){    //有方法体,但方法体为空                }            如果

Java从零开始学十八(抽象类和接口)

一.什么是抽象类和接口 抽象类.接口与类是一个层次的概念,是java中极其重要的概念. 抽象类是从多个类中抽象出来的公共模板,提供子类均具有的功能. 接口是从多个类中抽象出来的规范,体现的是规范和实现分离的原则,同时也有效的解决了java单重继承的缺陷 二.抽象类 2.1.抽象类与普通类的区别 抽象类的class前面有abstract关键字,而普通类没有 /* * 抽象类 */ public abstract class Person1 {} /* * 普通类 */ public class P