我们都知道接口里只有方法名,没有方法体。抽象类也是,但是跟接口最大的不同之处在于当程序有必要的时候可以往抽象类里面写方法体,以提供方便(虽然不推荐这么做)。
而且因为Java的单继承性使得,一个类不能从另一个类继承太多的方法。因此这种情况应该使用接口,用接口来定义很多方法,方便类实现这些方法。
当一个类实现了一个接口,那就说明它把接口里的方法都实现了-也就是说类里有接口里的所有的方法,因此占用了很大的资源空间,不管它有没有使用这些方法。
但是当一个类继承抽象类的时候,加入这个类没有调用父类的方法或没有重写这些方法,那这个类就不会实现这些方法,也就是说省了很大的空间。
基于这个特性,出来了一个非常常用的模式-缺省适配器模式。
两者相似之处在于:抽象类和接口都不能被实例化,两种都是java实现抽象的方式。不同之处分两个方面:
一、语法层面
1. 抽象类可以有构造方法,接口中不能有构造方法;
2. 抽象类中可以有普通成员变量,接口中没有普通成员变量(默认public static final );
3. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的;
4. 抽象类中的抽象方法的可以是public,protected的,但接口中的抽象方法只能是public的;
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类中可以包含任意访问权限的静态成员变量,但接口中定义的变量只能是public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
二、思想层面
抽象类 在Java中体现了一种继承关系,要想使得继承关系合理, 抽象类 和派生类之间必须存在“is-a”关系,即
父类和子类在概念本质上应该是相同的。对于interface来说则不然,并不要求 interface的实现类和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约(模版)而已。
总结来说:
抽象类与子类为"is a"关系,它抽象出事物的共同本质特征,可单一继承;
接口与实现类为"like a"关系,它定义并规范了个性化的功能特征,可多重继承(实现)。
分享到:
相关推荐
### C#接口定义和继承的区别详解 在C#编程语言中,接口(Interface)与继承(Inheritance)是实现代码复用与扩展性的两种重要机制。对于初学者来说,理解这两种概念及其之间的区别是非常重要的。 #### 一、接口...
在深入探讨Java中继承与接口的区别以及其产生原因之前,我们先明确两个概念的基本定义。在面向对象编程中,继承是一种使一个类继承另一个类的属性和方法的机制,允许子类扩展或重写父类的行为。接口则是一种定义行为...
继承、接口和多态的**区别**在于: - **继承**提供了代码复用和类层次结构,一个类只能有一个直接父类。 - **接口**提供了一种规范,强制类实现指定的方法,一个类可以实现多个接口,实现多继承。 - **多态**允许更...
### 接口与继承的区别 1. **目的不同**:接口主要用于定义一组行为的规范,而继承则用于扩展现有类的功能。 2. **实现方式不同**:一个类可以实现多个接口,但只能直接继承一个父类。 3. **访问修饰符限制不同**:...
"Java抽象类和接口和继承之间关系" Java抽象类和接口是两种不同的概念,它们之间存在着继承关系。在Java中,抽象类(abstract class)和接口(interface)都是用来描述对象的行为和状态的,但它们之间有着明显的...
### JAVA继承基本类、抽象类、接口的区别与联系 #### 一、概述 在Java语言中,类(Class)的设计是面向对象编程的核心之一。Java提供了三种方式来扩展类的功能:基本类、抽象类和接口。这三者之间既有相似之处,也...
Java 类、抽象类、接口和继承是面向对象编程的核心概念,它们构成了 Java 语言的基石。在 Java 中,类是用来封装数据和行为的结构,而对象则是类的实例,具有具体的属性和行为。 1. **类与对象的区别** 类是模板...
在C#编程语言中,多态(Polymorphism)、继承(Inheritance)和接口(Interface)是面向对象编程的三大核心特性。结构(Struct)则是C#中的一个基本类型,与类(Class)有所不同。本篇文章将深入探讨这些概念,并...
接口与抽象类区别 在软件开发中,接口和抽象类是两个常用的概念,但它们之间的区别却让许多人感到困惑。那么,什么是抽象类和接口?它们之间有什么区别?下面,我们就来详细地探讨这个问题。 一、抽象类 抽象类是...
这里我们将详细讨论这些概念以及抽象类与接口之间的相同点和区别。 首先,让我们来看看抽象类(Abstract Class): 1. 抽象方法是只有声明没有实现的方法,可以视为没有方法体的虚方法。例如: ```csharp public ...
### 抽象类和接口的详细区别和联系 在面向对象编程中,抽象类与接口是两种非常重要的概念,它们都是实现多态性的方式之一,但在使用场景、语法特性和设计哲学等方面存在明显的不同。本篇文章将深入探讨这两者的区别...
C# 中接口与抽象的区别 C# 中的接口和抽象类是两个重要的概念,但是它们之间的区别却经常被人们混淆。下面我们将详细讲解接口和抽象类的区别,并探讨它们在编程中的应用。 抽象类是特殊的类,只能被继承不能被实例...
6. 继承关系:抽象类遵循传统的继承关系,接口之间可以采用多重继承,即一个接口可以继承多个其他接口。 在实际开发中,我们通常会根据需求来选择使用抽象类还是接口。如果需要为一组相关的类提供公共的属性和方法...
### C#中抽象类与接口的区别 在C#编程语言中,抽象类和接口都是用于实现面向对象编程中多态特性的关键概念。它们都旨在为其他类提供一种定义行为和特性的模板或规范,但它们之间存在着重要的区别。本文将详细探讨C#...
### 抽象类和接口的区别分析 在面向对象编程中,抽象类与接口都是实现代码复用和提高软件模块化的重要工具。它们各自拥有独特的特性和应用场景,掌握这些概念对于编写高质量、可维护性强的代码至关重要。下面我们将...
### Java抽象类与接口的区别 #### 一、引言 在Java编程中,抽象类(Abstract Class)与接口(Interface)都是实现抽象的关键工具。它们各自有着独特的优势和适用场景,掌握这两者的区别有助于开发者更好地设计系统...
### 抽象类与接口的区别 #### 一、理解抽象类与接口的基本概念 在面向对象编程中,抽象类和接口都是重要的概念,用于描述共有的特性或行为,但它们在实现方式和用途上有所不同。 **抽象类**: - **定义**:抽象类...
### 抽象类与接口的区别 在面向对象编程中,抽象类和接口是两种非常重要的概念,它们在软件设计和实现过程中发挥着不可替代的作用。本文将深入探讨这两种概念的区别,帮助开发者更好地理解和运用它们。 #### 一、...
接口中的所有方法默认都是public abstract类型的,而且接口可以继承其他接口,实现多继承。这使得接口成为定义一组行为规范的理想选择,使得不同类可以遵循相同的规范并提供各自独特的实现。例如,在Java中,`...
下面将从多个方面详细介绍抽象类与接口的区别。 ### 一、定义与基本语法 #### 抽象类 抽象类是一种特殊的类,它不能被实例化,只能作为其他类的父类来使用。抽象类中可以包含抽象方法(没有方法体的方法)和具体...