面向接口、面向对象;接口、抽象类的理解

原创 2017年12月22日 13:42:15

我有一个梦想,是改变世界,这是很多技术人员的梦想;从小事做起,踏实做人做事,当身边的人或事因为自己能像更好的方向改变或发展的时候,那就是在改变世界,至花甲之时,可能我的梦想也无法实现,但我会一直追逐着他前行。我相信蝴蝶效应。荣耀的背后可这一道孤独。

面向接口编程(IOP:Interface Oriented Programming)
面向对象编程(OOP:Object Oriented Programming)

面向接口编程
在一个系统中,系统中的各个功能或业务都是由不同的对象协作完成的,各个对象中的具体实现对于软件设计人员(软件设计是从软件结构、组成、架构等方面来进行设计)来讲并不重要,他关心的是各个对象之间的通信,小到类之间的交互,大到模块功能之间的交互;不是简单意义上的代码角度的思维,而是一种架构、软件结构的思维,他强调的是低耦合,结构中的各个层之间不实现具体类的依赖,而是实现接口间的依赖。

面向对象编程
一种计算机编程架构,一个系统是面向对象编程,其系统设计可以使用面向接口编程。
实现:重用性、灵活性、扩展性。(通过面向接口设计软件结构可以很好的实现面向对象思想)
特点:封装、继承、多态。
面向对象包含面向接口,面向对象编程是一种软件架构,面向接口编程是一种软件设计。

接口与抽象类的区别
1. 接口是行为模式的抽象,抽象类是根源的抽象
2. 接口描述的是“能做什么”,抽象类描述的是“是什么”
a. 1.飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是F22属于飞机抽象类,鸽子属于鸟抽象类;
b. 2. 就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承),一个门可以有锁(接口)也可以有门铃(多实现)。门(抽象类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染))。
3. 接口是一种契约,主要是在软件设计架构上使用;抽象类在代码实现上发挥作用,可以实现代码的重用。
4. 模板方法设计模式是抽象类的一个典型应用。

抽象类:
1、抽象类不可以被实例化,不能定义构造函数;
2、抽象类可以定义成员变量(私有、公有、静态、非静态等都可以),非抽象方法,
3、拥有抽象方法的类必须是抽象类;
3、抽象类中可以定义虚方法,虚方法必须有方法体,派生类中可以实现或不实现虚方法。派生类中必须实现抽象方法。
4、抽象派生类可以不实现基类的抽象方法。
5、非抽象派生类必须实现所有抽象方法。
6、一个派生类只能继承一个抽象类(因为单继承机制)。

接口:
1、接口不可以被实例化,不能定义构造函数;
2、接口类定义的接口不能有访问修饰符(显示写public也不行,因为接口必须是public的,编译器自动会加上public来实现公开)。
3、接口中只能包含方法声明(即接口),不能定义成员变量。
4、派生类必须实现所有接口声明。
5、一个派生类可以实现多个接口。

抽象类和接口
相同点:
1、都可以被继承。
2、都不能被实例化。
3、都可以包含方法声明。
4、派生类必须实现未实现的方法(除了抽象类中的虚方法)。
区别:
1、抽象类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件和方法声明。不能包含字段
2、抽象类只能被单一继承,接口可以被多重实现。
3、抽象类被定义在一些紧密相关的类间,接口大多是关系疏松但都实现某一功能的类间(接口强调行为及契约)。
4、抽象类是一系列相关对象中抽象出来概念,反应的是内部共性,接口是满足外部调用而定义的一系列功能契约,反应的是外部特性。
5、如果抽象类实现接口,则可以把接口中的方法(即具体接口)作为抽象方法映射到抽象类中作为抽象方法而不实现,而在抽象类的子类中来实现。

下面的代码示例,体现了行为模式(契约)使用抽象类与接口的区别:
人类。抽象类APerson,定义了吃东西的抽象方法

public abstract class APerson
{
    public void PlayFootbal()
    {
    Console.WriteLine("踢足球");
    }
    public abstract void Eat();
}

中国人。继承人类抽象类,具备了父类的吃东西方法,定义了通过筷子吃东西的抽象方法

public abstract class Chinese : APerson
{
    public abstract void EatByKuaiZi();
}

美国人。继承人类抽象方法,具备了父类的吃东西方法,定义了通过叉子吃东西的抽象方法

public abstract class American : APerson
{
    public abstract void EatByChaZi();
}

法国人。既会使用筷子吃东西,也会使用叉子吃东西,但是无法实现,除非在这里重新自己实现一遍两个方法,或继承中国人或美国人之一,实现其中一个方法,如果用筷子或叉子吃东西是一个很复杂的业务,那么都已经经过测试,这里自己再重新实现一遍,1增加了工作量,2增加了不稳定性。;
注意:继承只能是单继承,是无法多继承的。

public abstract class French : APerson
{
    无法既使用筷子吃东西,也使用叉子吃东西;
}

人类。定义了吃东西接口

public interface IPerson
{
    void Eat();
}

中国人,实现了人类接口,定义了使用筷子吃东西的接口。

public interface IChinese:IPerson
{
    void EatByKuaiZi();
}

美国人。实现了人类接口,定义了使用叉子吃东西的接口。

public interface IAmerican : IPerson
{
    void EatByChaZi();
}

法国人。实现了人类接口、中国人接口、美国人接口,定义了使用手吃东西的接口。
既能用筷子,也能用叉子,还能用手。而使用抽象类是无法实现的。
注意:一个类或接口可以实现多个接口。

public interface French ,IChinese,IAmerican
{
    void EatByHand();
}

抽象类也是一种规则,他的动机是为了实现代码的可复用性

版权声明:本文为博主原创文章,未经博主允许不得转载。

面向对象中接口和抽象类的区别

从表象上来说: 1、抽象类可以给出一些成员的实现,接口却不包含成员的实现; 2、抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现; 3、一个类只能继承一个抽象类,但可以实现多...
  • u010784236
  • u010784236
  • 2015年01月23日 17:53
  • 1601

PHP中抽象类与接口的应用场景

/***   ====笔记部分====   接口的具体语法:   0:以人类为, class Human 是人的草图   而接口 是零件   可以用多种零件组合出一种新特种来.   1: ...
  • hanliuxinming
  • hanliuxinming
  • 2014年03月10日 01:02
  • 1200

java 面向对象三大特性(封装,继承,多态)以及抽象、接口的介绍

java 面向对象三大特性(封装,继承,多态)以及抽象、接口的介绍,this,super,构造方法的使用介绍...
  • qq_22118507
  • qq_22118507
  • 2016年05月16日 09:45
  • 7345

面向对象与Java实现(抽象类、接口

  • 2012年05月14日 13:12
  • 177KB
  • 下载

从面向对象思想上去理解抽象类和接口的区别

abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。 abstract class和inte...
  • a1256242238
  • a1256242238
  • 2017年06月02日 15:55
  • 217

对面向对象设计的理解—Java接口和Java抽象类

在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解。 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只...
  • Myth0707
  • Myth0707
  • 2017年06月18日 11:48
  • 212

Java重修之路(九)面向对象之final关键字,抽象类(abstract),接口(interface)

final关键字 首先明确,继承的出现打破了封装性,子类继承了父类,就能获得父类的属性和方法,有些封装好的东西就会全部暴露,不安全。所以对于一些特殊的类,为了强制保证其封装性,用final修饰,不...
  • Momentyol
  • Momentyol
  • 2016年11月04日 20:28
  • 270

面向对象(多态,抽象类,接口的比较)

(一)面向对象(多态) 多态概述: 多态实质上是同一个对象相应不同消息的能力,你理解不了也可以把它理解为事物存在的多种形态. 当然了能够理解实质当然更好. 多态的前提: 要有继承关系, 要有方法重...
  • tongzhengtong
  • tongzhengtong
  • 2015年09月10日 23:32
  • 1457

黑马程序员--JAVA<面向对象>--构造函数、抽象类、接口、多态

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------...
  • u011544642
  • u011544642
  • 2013年07月29日 18:41
  • 680

Java基础(面向对象三——继承、final关键字、抽象类、接口)

一、继承 继承:继承是面向对象的三大特点之一,当多个类中存在相同的属相和行为时,可以把这些共有的内容抽取到单独一个类中,那么多个类无需在定义这些属性和行为,只需要使用extends关键字继承抽取出来...
  • zzamk
  • zzamk
  • 2015年03月10日 10:19
  • 826
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:面向接口、面向对象;接口、抽象类的理解
举报原因:
原因补充:

(最多只允许输入30个字)