面向对象-抽象类和接口解析

1. 什么是抽象类

在面向对象编程中,我们通过类来描述事物,这个描述可以是抽象的,因为不可能通过类描述所有的属性和行为,可能同一类事物的不同个体有着行为上的差异。
例如我们想用一个类描述鸟的所有基本属性和行为,而所有的鸟都继承自这个类,我们可以把它称为基类。
而鸟的叫声是有差异的,我们很难在基类中定义鸟的这个行为,这时候我们就需要用到抽象方法了,将鸟叫这个行为用抽象方法描述,让子类对象自己去实现,而包含抽象方法的类也必须声明为抽象的,这就是抽象类。

总的来说就是:
抽象类可以使用抽象的方式描述事物的行为,具体的行为则让子类去实现。

2. 什么是接口

接口是比抽象类更加抽象的东西,它里面所有方法都是公开抽象的。接口只是提供了一个形式,而为提供任何具体实现。
用一个很形象的方式来描述接口就是:设计图。它可以和抽象类一样当作基类定义,但是它不包含任何实现。而它更有用的一个作用是用来作为类与类之间的“协议”,因为任何使用某特定接口的代码都知道它有哪些方法功能可以使用,而且仅仅需要知道这些。

3. 抽象类和接口的区别

用法和定义上的区别就不多说了,大家都知道,而这里主要说下它们的作用。

抽象类的主要作用是让子类去实现它的某一个方法,让子类提供某个实例,或者表现出不同的形式,例如ListView中BaseAdapter的getView方法。

而接口的主要作用是定义一个类与类之间的“协议”,它更像是被当作一个工具使用,实现类与类之间的解耦。也可以使用接口代替抽象类,但是你要确定这是不是必须的,否则会带来不必要的复杂性。

简单一句话区别抽象类在于:
抽象类的作用在于描述某一行为的抽象性,接口的作用在于定义“协议”。在没有考虑到这个“协议”是否有用时,不要滥用接口。如果你认为接口是扩展一个类的功能,这并没有错,但是你要确定这个功能是会被其它对象给用到,并且该对象也只专注于这个功能。

原文地址:https://www.cnblogs.com/rinack/p/8949814.html

时间: 2025-01-09 09:32:22

面向对象-抽象类和接口解析的相关文章

Java面向对象—抽象类和接口

本文引用海子的一篇文章:http://www.cnblogs.com/dolphin0520/p/3811437.html 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的实现.抽象方法的声明格式为: abstract void fun(); 抽象方法必须用abstract关键字进行修饰.如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰.因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象. 下面

php面向对象-抽象类与接口

一.抽象类与接口 1.抽象类:拥有抽象方法的类就是抽象类(没有抽象成员属性) 抽象方法:没有方法体的方法就是抽象方法 什么是没有方法体?没有花括号 所有抽象类和抽象方法都需要abstract关键字修饰 一个抽象类里面可以拥有多个抽象方法,也可以拥有多个非抽象方法 抽象方法不能被声明为私有 继承抽象类的时候,方法也要遵守3,2,1原则 继承抽象类的时候,方法体中的形参数量要和抽象方法保持一致 继承抽象类的时候,抽象方法中的形参如果有默认值,则实现的方法也要有默认值,值可以不一样. 抽象类可以拥有成

面向对象 抽象类、接口、类库、五大原则

抽象类 抽象类,只为继承而出现,不定义具体的内容,只规定该有哪些东西一般抽象类中只放置抽象方法,只规定了返回类型和参数比如: 人    - 有吃饭,睡觉方法 男人 - 继承人抽象类,必须实现吃饭,睡觉的方法主体 女人 - 继承人抽象类,必须实现吃饭,睡觉方法的主体 抽象类中可以有普通属性,通过子类来使用 1.关键字:abstract2.抽象类可以包含抽象方法和普通方法3.abstract关键字可以定义方法为抽象方法,抽象方法可以没有函数体4.抽象类无法被实例化,抽象类主要做为一个基类,让别的类继

java面向对象- 抽象类和接口

一.final关键字: 1.final关键字在java中被称为完结器,表示最终的意思 2.final能声明类.方法.属性: 使用final声明的类不能被继承 使用final声明的方法不能被重写 使用fanal声明的变量变成常量,常量不可以被修改.变量变成常量时,一般使用大写,例如:final int AGE = 22; 二.抽象类: 1.包含一个抽象方法的类就是抽象类. 2.声明而未被实现的方法就是抽象方法.必须使用abstract声明. 3.抽象类被子类继承,不能直接对其进行实例化,必须通过其

JAVA面向对象 - 抽象类、接口

抽象类 用abstract关键字来修饰一个类时,这个类就叫抽象类,用abstract关键字来修饰一个方式时,这个方法就是抽象方法.当一个类继承的父类是抽象类的话,需要我们把抽象类中的所有抽象方法全部实现.那为什么要用抽象类呢?当父类的一些方法不能确定时,可以先在抽象类里定义抽象方法. 注意事项 Ⅰ.抽象类不能被实例化 Ⅱ.抽象类不一定要包含abstract方法. Ⅲ.一旦类包含了abstract方法,则这个类必须声明为abstract Ⅳ.抽象类不能有主体 实例 1 package com.be

面向对象 抽象类与接口

面向对象_多态_抽象类_接口

09.01_面向对象(多态的概述及其代码体现) A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提 a:要有继承关系. b:要有方法重写. c:要有父类引用指向子类对象. C:案例演示 代码体现多态 public class Demo1_polymorphic { /** * 成员变量:编译时看左边(父类),运行时看左边(父类) * 成员方法:编译时看左边(父类),运行时看右边(子类) * @param args */ public static void main(Str

python开发面向对象基础:接口类&抽象类&多态&多继承

一,接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能 开发中容易出现的问题 1 class Alipay: 2 ''' 3 支付宝支付 4 ''' 5 def pay(self,money): 6 print('支付宝支付了%s元'%money) 7 8 class Applepay: 9 ''' 1

12.面向对象(继承/super/接口/抽象类)

面向对象继承与派生继承继承顺序继承原理子类调用父类的方法(super)组合接口接口的概念:接口的概念解释和使用:python中的接口:抽象类 面向对象 继承与派生 继承 什么是继承?继承是一种创建新的类的方式 class A: pass class B(A): pass 在python中,新建的类可以继承自一个或者多个父类,原始类称为基类或者超类,新建的类称为派生类或者子类 python中类的继承分为,单继承和多继承. 查看继承的方法B.__bases__ 如果没有指定基类,python的类会默