面向对象--接口与抽象类、对象和接口(通俗讲解)

合集下载

什么是面向对象、对象是什么、什么是类、如何使用对象、类和对象的关系

什么是面向对象、对象是什么、什么是类、如何使用对象、类和对象的关系

什么是⾯向对象、对象是什么、什么是类、如何使⽤对象、类和对象的关系⾯向对象⼀、⾯向对象 概念:⾯向对象是⼀种编程思想,使⽤编程语⾔解决现实问题的⼀种思路。

分类: ⾯向过程: C 语⾔ ⾯向对象: Java ⾯向对象的思想: ⾯向对象的思想: ⾯向过程的思想:⾃顶向下 逐步执⾏。

---> 当解决⼀件事情的时候,⾸先想到的是我该怎么去做⾯向对象思想:以对象为中⼼,使⽤对象调⽤其功能。

---> 当解决⼀件事情的时候,⾸先想到的是我该让谁帮我做。

想到的谁 ---> 对象 对象:现实⽣活中存在的真实的事物都是对象,Java 中有⼀句名⾔: 万物皆对象,⼤到宇宙、⼩到夸克在Java 的世界中都可以看成对象。

提起对象,就需要提起另⼀个概念——类。

类是对象的模板,对象是类的实例。

⼆、类 概念: 将具有相同特征的⼀类事物的共性进⾏抽取(抽取的过程叫做抽象),形成的⼀个概念叫做类。

类的抽象: 1. 怎么去描述⼀个事物,从哪些维度进⾏描述? 这个事物具有什么 ---> 属性 这个事物会做什么 ---> ⾏为 2. 怎么去描述⼀类事物的共性? 这些事物具有什么 ---> 属性 这些事物会做什么 ---> ⾏为 类和对象的关系: 类是对象的模板 对象是类的实例 类的定义: 概述: 属性 : 使⽤成员变量来进⾏描述 ⾏为 : 使⽤成员⽅法进⾏描述 语法:关键词:class语法:public class 类名{} 成员变量 定义位置:类中⽅法外 语法: 数据类型 变量名; / 数据类型 变量名 = 初始值;作⽤域:⾄少在本类 默认值: 和数组元素的默认值是⼀样的 基本数据类型 整数类型 0 ⼩数类型 0.0 字符类型空字符 布尔类型 false 引⽤数据类型 null 定义的注意事项 1. 在同⼀个类中不能定义两个同名的成员变量 2. 在同⼀个类中成员变量可以和局部变量可以重名,但是在访问的时候,局部变量优先。

面向对象知识点总结

面向对象知识点总结

⾯向对象知识点总结1、⾯向对象三⼤特征封装:封装就是隐藏对象的属性和实现细节,仅对外公开接⼝,控制在程序中属性的读和修改的访问级别,将抽象得到的数据和⾏为(或功能)相结合,形成⼀个有机的整体。

继承:继承就是⼦类继承⽗类的特征和⾏为,使得⼦类对象(实例)具有⽗类的实例域和⽅法,或⼦类从⽗类继承⽅法,使得⼦类具有⽗类相同的⾏为。

多态:多态指同⼀个⾏为具有多个不同表现形式或形态的能⼒,是指⼀个类实例(对象)的相同⽅法在不同情形有不同表现形式,使具有不同内部结构的对象可以共享相同的外部接⼝。

2、类与对象对象:对象是类的⼀个实例,有状态和⾏为。

类:类是⼀个模板,它描述⼀类对象的⾏为和状态。

⼀个类可以包含以下类型变量:(1)局部变量:在⽅法、构造⽅法或者语句块中定义的变量被称为局部变量。

变量声明和初始化都是在⽅法中,⽅法结束后,变量就会⾃动销毁。

(2)成员变量:成员变量是定义在类中,⽅法体之外的变量。

这种变量在创建对象的时候实例化。

成员变量可以被类中⽅法、构造⽅法和特定类的语句块访问。

(3)类变量:类变量也声明在类中,⽅法体之外,但必须声明为 static 类型。

3、构造⽅法每个类都有构造⽅法。

如果没有显式地为类定义构造⽅法,Java 编译器将会为该类提供⼀个默认构造⽅法。

在创建⼀个对象的时候,⾄少要调⽤⼀个构造⽅法。

构造⽅法的名称必须与类同名,⼀个类可以有多个构造⽅法。

4、封装封装是指⼀种将抽象性函式接⼝的实现细节部分包装、隐藏起来的⽅法。

封装可以被认为是⼀个保护屏障,防⽌该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接⼝控制。

修改属性的可见性来限制对属性的访问(⼀般限制为private),可通过getter和setter⽅法访问和操作类中私有成员变量。

如下代码:class BookClass{private String title;private int pageNum;BookClass(){};// 设置名称public void setTille(String title) {this.title = title;}public String getTitle() {return title;}// 设置页数public void setPageNum(int pageNum) {if (pageNum>=200) {this.pageNum = pageNum;} else {System.out.println("页数输⼊错误,图书页数不能⼩于200页,设置为默认值200");this.pageNum = 200;}}public int getPageNum() {return pageNum;}// 显⽰图书信息public void detail() {System.out.println("图书名称为:"+title+",页数为:"+pageNum);}}5、继承在 Java 中通过 extends 关键字可以申明⼀个类是从另外⼀个类继承⽽来的。

面向对象分类方法

面向对象分类方法

面向对象分类方法面向对象分类方法是指根据不同的规则将一组对象进行分类的过程。

在面向对象编程中,对对象进行分类可以帮助我们更好地理解和组织代码,提高代码的可读性和可维护性。

以下是几种常见的面向对象分类方法。

1.继承分类法继承是面向对象编程中的一个重要概念。

在Java等面向对象语言中,我们可以通过继承机制来创建一个新类,并从已有的类中继承属性和方法。

继承分类法是将对象按照它们之间的继承关系进行分类的方法。

通过继承分类法,我们可以将所有具有相同属性和行为的对象组合在一起,然后通过对其进行重用和扩展来减少代码的冗余。

2.接口分类法接口在面向对象编程中也是一个重要的概念。

在Java等面向对象语言中,我们可以定义一个接口,并在某个类中实现这个接口。

接口分类法是将对象按照它们实现的接口进行分类的方法。

通过接口分类法,我们可以将所有实现相同接口的对象组合在一起,从而提高代码的可重用性和可扩展性。

3.多态分类法多态是面向对象编程中的一个重要概念。

在Java等面向对象语言中,我们可以通过多态机制来处理不同类型的对象。

多态分类法是将对象按照它们的多态性进行分类的方法。

通过多态分类法,我们可以将所有具有相同多态性质的对象组合在一起,从而简化代码的实现和维护。

4.抽象分类法抽象是面向对象编程中的另外一个重要概念。

在Java等面向对象语言中,我们可以定义一个抽象类,并在其子类中实现具体的功能。

抽象分类法是将对象按照它们所属的抽象类进行分类的方法。

通过抽象分类法,我们可以将所有从同一个抽象类继承而来的对象组合在一起,从而提高代码的可读性和可维护性。

5.组合分类法组合是一种将多个对象组合成一个整体的技术。

在Java等面向对象语言中,我们可以将多个对象组合成一个新的对象,并在组合对象中实现具体的功能。

组合分类法是将对象按照它们的组合方式进行分类的方法。

通过组合分类法,我们可以将所有按照相同组合方式组合的对象组合在一起,从而简化代码的实现和维护。

接口与实现接口的类

接口与实现接口的类

接口与实现接口的类接口是Java编程语言中的一个重要概念。

它定义了一组方法的签名,但没有提供方法的实现。

接口可以被多个类实现,从而使这些类具有相同的行为。

在Java中,使用interface关键字来定义一个接口。

一个接口可以包含常量、方法的声明和默认方法的实现。

接口中的方法默认为public和abstract,不需要显式地声明为public。

接口主要用于实现多态性和代码重用。

接口与抽象类类似,但又有不同之处。

接口中的方法都是抽象的,没有实际的实现。

而抽象类中可以包含具体的方法实现。

一个类可以实现多个接口,但只能继承一个抽象类。

接口的定义示例:```javapublic interface Animalvoid move(;void eat(String food);```上述代码定义了一个Animal接口,有两个方法move和eat。

接口中的方法声明不应包含方法体,只包含方法的签名和返回类型。

实现接口的类被称为实现类。

实现类必须提供接口中定义的所有方法的具体实现。

一个类可以实现多个接口,通过逗号分隔。

实现接口的示例:```javapublic class Dog implements Animalpublic void movSystem.out.println("Dog moves by running.");}public void eat(String food)System.out.println("Dog eats " + food);}```上述代码中的Dog类实现了Animal接口,并提供了move和eat方法的具体实现。

实现类必须实现接口中的所有方法,否则会编译错误。

如果一个类不想实现接口中的一些方法,可以将该类定义为抽象类。

接口的一个重要特性是多态性。

通过接口,可以实现多个具有相同行为的类的对象的通用处理。

这可以极大地提高代码的灵活性和可扩展性。

面向对象程序设计中的抽象类与接口研究

面向对象程序设计中的抽象类与接口研究

面向对象程序设计中的抽象类与接口研究随着软件开发技术的不断发展,面向对象程序设计成为了当今十分流行和广泛使用的一种编程思想。

而在面向对象程序设计中,抽象类与接口则是两个非常重要的概念。

本文将对抽象类与接口进行深入研究。

一、什么是抽象类?抽象类是一种不能被实例化的类,它的主要作用是为其子类提供具有实现细节的基类。

抽象类一般用于描述某一类事物的抽象概念,而非具体的某一个事物。

在Java中,我们可以使用abstract关键字来定义一个抽象类。

抽象类中可以包含抽象方法和非抽象方法,抽象方法则是一种没有具体实现的方法,而非抽象方法则是有具体实现的方法。

abstract class Animal {String name;public void setName(String name) { = name;}public abstract void eat();}上述代码定义了一个名为Animal的抽象类和一个抽象方法eat()。

由于抽象方法没有具体实现,因此不需要在抽象类中对它进行实现。

二、什么是接口?接口是一种到处可见的类型,它定义了一组方法的规范,但并不提供对这些方法的具体实现。

接口只是指定了一组标准,由实现该接口的类来提供具体实现。

在Java中,我们可以使用interface关键字来定义一个接口。

接口中只能包含常量和抽象方法,常量必须使用public static final修饰符进行修饰,抽象方法则必须使用public abstract修饰符进行修饰。

interface Animal {public static final int NUM_LEGS = 4;public abstract void makeSound();}上述代码定义了一个名为Animal的接口和一个抽象方法makeSound()。

由于接口中的抽象方法没有具体实现,因此我们必须在实现该接口的类中对它进行实现。

三、抽象类与接口的区别虽然抽象类与接口都是用于描述某一类事物的抽象概念,但二者之间还是存在一些区别的,具体表现如下:1. 实现方式不同抽象类是一种类,是通过继承来实现的,而接口是一种接口,是通过实现来实现的。

面向对象五大原则

面向对象五大原则

1. 单一职责原则(SRP)单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因。

也就是说,不要把变化原因各不相同的职责放在一起,因为不同的变化会影响到不相干的职责。

再通俗一点地说就是,不该你管的事情你不要管,管好自己的事情就可以了,多管闲事害了自己也害了别人。

在软件设计中,如果一个类承担的职责过多,就等于吧这些职责耦合在一起,而一个职责的变化可能会削弱和抑制这个类完成其他职责的能力。

这耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。

软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。

如果多于一个的动机去改变一个类,那么这个类就具有多余一个的职责,就应该要考虑类的职责分离。

2. 开放-封闭原则(The Open-Closed Principle 简称OCP)开放-封闭原则,或叫开-闭原则,是说软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改。

不修改的意思就是是“你可以随便增加新的类,但是不要修改原来的类”。

从这个角度去理解就好多了,其实这里还是一个隔离变化的问题。

这个原则的两个特征:一个是对于扩展是开放的;另一个是对于更改是封闭的。

我们在设计开发任何系统时,都不可能指望系统一开始就需求确定,就不再变化(要这样就太幸福了,哈哈),这是不现实的也是不科学的想法。

既然需求是有一定变化的,那么如何在面对需求变化时,设计的程序可以相对容易的修改,不至于说,新需求一来,就要把整个程序推倒重来(这样会让程序员疯了不可,哈哈,你不想疯吧)。

怎样的设计才能面对需求的改变却可以保持相对稳定,从而使得系统可以在第一个版本以后不断推出的新版本呢?开放-封闭原则就是我们的答案。

在程序设计时,我们要时刻考虑尽量把类设计的足够好,写好了就不要去修改,如果有新的需求来了,我们增加一些类来完成新的需求,原来的代码能不动就不动。

绝对的对修改关闭是不可能的,无论模块是多么的封闭,都会存在一些无法对之封闭的变化,既然不能完全封闭,设计人员必须对他设计的模块应该对那种变化封闭做出抉择、他必须事先猜测出最有可能发生变化的变化种类,然后构建抽象来隔离那些变化。

什么是抽象类什么是接口两者有什么区别?如何使用它

什么是抽象类什么是接口两者有什么区别?如何使用它

什么是抽象类什么是接⼝两者有什么区别?如何使⽤它⼀、抽象类:抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象⽅法,这是普通类所不能的。

抽象⽅法只能声明于抽象类中,且不包含任何实现,派⽣类必须覆盖它们。

另外,抽象类可以派⽣⾃⼀个抽象类,可以覆盖基类的抽象⽅法也可以不覆盖,如果不覆盖,则其派⽣类必须覆盖它们。

⼆、接⼝:接⼝是引⽤类型的,类似于类,和抽象类的相似之处有三点:1、不能实例化;2、包含未实现的⽅法声明;3、派⽣类必须实现未实现的⽅法,抽象类是抽象⽅法,接⼝则是所有成员(不仅是⽅法包括其他成员);另外,接⼝有如下特性:接⼝除了可以包含⽅法之外,还可以包含属性、索引器、事件,⽽且这些成员都被定义为公有的。

除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。

⼀个类可以直接继承多个接⼝,但只能直接继承⼀个类(包括抽象类)。

三、抽象类和接⼝的区别:1.类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.⽽接⼝只是⼀个⾏为的规范或规定,微软的⾃定义接⼝总是后带able字段,证明其是表述⼀类类“我能做。

”.抽象类更多的是定义在⼀系列紧密相关的类间,⽽接⼝⼤多数是关系疏松但都实现某⼀功能的类中.2.接⼝基本上不具备继承的任何具体特点,它仅仅承诺了能够调⽤的⽅法;3.⼀个类⼀次可以实现若⼲个接⼝,但是只能扩展⼀个⽗类4.接⼝可以⽤于⽀持回调,⽽继承并不具备这个特点.5.抽象类不能被密封。

6.抽象类实现的具体⽅法默认为虚的,但实现接⼝的类中的接⼝⽅法却默认为⾮虚的,当然您也可以声明为虚的.7.(接⼝)与⾮抽象类类似,抽象类也必须为在该类的基类列表中列出的接⼝的所有成员提供它⾃⼰的实现。

但是,允许抽象类将接⼝⽅法映射到抽象⽅法上。

8.抽象类实现了oop中的⼀个原则,把可变的与不可变的分离。

抽象类和接⼝就是定义为不可变的,⽽把可变的座位⼦类去实现。

Java的对象、类、方法和接口

Java的对象、类、方法和接口

1.1什么叫对象?什么叫方法?什么叫面向对象的程序设计?面向过程的程序设计语言最重要的特点是按照解决问题的一个一个步骤来设计程序。

这种语言是与解决相对比较简单的问题,当程序规模较大时,将显得纷繁复杂。

“对象”原来是描述自然界时使用的一个词语。

比如,现在我正在写讲义,桌上的稿纸、手中的笔、案头的参考书、身后的电脑以及窗外的鸟都可以成为对象面向对象,就是将世界看成由许多彼此之间能联络的对象组成。

不少程序设计语言借用了对象这个词语作为一个专用名词,此时,对象也是具有状态和行为两个特征。

在程序设计中,对象的状态时相对处于静态的,用变量来描述和表达;而对象的行为时动态的,他们通过“方法”来实现和完成,所以方法一定是实现对象行为的语句块。

从功能上讲,方法和子程序、函数很相似。

变量和方法是彼此有关、相互依赖的。

当然,计算机都是用数据来表示对象的状态的,也是通过对数据的操作和修改来体现某个方法的功能的。

1.2 Java作为面向对象的程序设计语言有什么特点?Java是面向对象的程序设计语言,从面向对象这个角度看,体现了如下三个特点:a:封装性—面向对象的程序设计语言都是把数据和处理数据的操作结合在一起而构成一个整体,这就是对象。

对象的使用者只能看到对象的外部特性,比如,其主要功能、如何调用等,而看不到内部如何实现这些功能。

作为面向对象的程序设计语言,程序中的数据就是变量,程序对数据作处理则成为方法。

变量和方法都被封装在对象中。

所以,一个对象就是变量和方法的集合,其中变量表明这个对象的状态,方法实现这个对象所具有的行为,而且在程序中将这些变量和方法进行封装,使它们成为一个模块,再用一个名字来代表这个模块。

这样,以后得更高层的程序设计中,就不必关心某个对象的行为到底是怎样实现的。

可见,将对象封装就是为了使模块尽可能少地展现其内部细节,而只是以一种界面来面向外部。

对象的封装性减少了程序各部分之间的依赖,使程序的复杂性降低,而可靠性提高,并便于修改。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

面向对象--接口与抽象类的恩恩怨怨
接口与抽象类是面向对象编程中两个非常重要的角色,二者各自起着非常重要的作用。

但是很多初学的朋友往往会对使用接口还是抽象类存在的很大的迷惑。

就我自己的一点心得,发表一下拙见。

面向对象的一些回顾:
面向对象世界中有一个古老的法则:接口隔离原则,指的是不要把多个功能全部都集中在一个接口里面。

接口实现的功能要相对单一;衍生开来可以得到另外一个结论:对一组或者称一系列功能的实现,尽量定义相对功能单一的小模块来实现这一组功能。

这其实也是解耦和的体现。

那这跟我们的接口和抽象类有什么关系呢?那又得摆出另外一个法则:依赖倒置原则,针对接口编程而不是针对实现编程。

说到这,又会有一个新的问题蹦出来,这是自相矛盾啊,既然要针对接口编程还要抽象类干吗使?我们经常说面向对象,面向对象是来源于生活的。

是人们要把对现实世界中的一系列方法论应用到程序设计当中来。

从对象这一概念的引入我们就可以揣摩这一点。

人类社会中有很多对象的概念,人、车、物体。

不幸的是用程序来实现这些对象比在概念上定义对象要难很多。

(如果能达成这一共识,您可以继续往下看,否则就请看官您移步至留言讨论吧)
MS给出开发者的建议是,用抽象类来实现接口。

子类再继承基类。

实例说明:
为什么要这么建议?OK,我们试着结合实际来说明一下这个问题吧。

我们要造车。

这个车有个基本的属性就是能移动、还必须有轮子。

那我们就设计一个接口
1public interface ICar
2 {
3 string Wheel
4 {
5 get;
6 set;
7 }
8 void Move();
9 }
10
接下来的事情,就是实现了。

造什么车都行,继承一下就行。

随着科技的发展,我们的车想要飞了。

此时当然不能修改这个接口,因为要遵循开闭原则。

为什么要遵循?我们可以想一下,人坐上飞机能飞上天。

但是也没见谁认为人有会飞这个特性的。

那也好办,不许修改,那我再加一个接口。

1interface IFlyable
2 {
3 void Fly();
4 }
5
好,我们的飞行汽车最后应该是这样的。

1class FlyCar : ICar,IAerocraft
2 {
3 private string wheel = string.Empty;
4
5 public void Fly()
6 {
7 Console.WriteLine("{0}车飞起来了",this.wheel);
8 }
9 public string Engine
10 {
11 get
12 {
13 return wheel;
14 }
15 set
16 {
17 wheel = value;
18 }
19 }
20
21 public void Move()
22 {
23 Console.WriteLine("{0}轮车在走",this.wheel);
24 }
25 }
26
看起来很不错,车能飞能走了。

那它现在他的祖宗到底车还是飞行器呢?我们自己在心里辩论一下吧。

估计不是很容易辩清楚。

我们前面说过,面向对象的思想来源于现实生活。

如果把这组例子引入到现实中来,造会飞的汽车。

肯定是要在原有的汽车上面下功夫。

比如你装上喷气动力装置,或者装上翅膀。

这只属于扩展功能,而不能说是继承基类。

但上面的例子可以明显的看出,我们的飞行汽车已经成了杂交品种。

分不出到底是车还是飞行器了。

这里就可以知道为什么C#和JA V A都不支持多重继承基类了。

避免杂交,减少耦合。

上面把车定义成接口并不完美,我们知道,一辆正常的车肯定能移动。

这是天生的本质,不需要任何实现。

但是上面还需要子类来实现这个功能。

从这一点其实可以衍生出很多问题来。

我们这里不做过多讨论。

重新设计这个系统。

我们可以把移动,飞行都看成是一种行为。

我们的车本身拥有Move 这个行为,是构成车基类的基本要素。

1interface IMoveable
2 {
3 void Move();
4 }
5 interface IFlyable
6 {
7 void Fly();
8 }
9public abstract class Car : IMoveable
10 {
11 public abstract string Wheel
12 {
13 get;
14 set;
15 }
16 public virtual void Move()
17 {
18 Console.WriteLine("车移动了");
19 }
20 }
21 public sealed class FlyCar : Car,IFlyable
22 {
23 private string wheel = string.Empty;
24 public override string Wheel
25 {
26 get
27 {
28 return wheel;
29 }
30 set
31 {
32 wheel = value;
33 }
34 }
35
36 public void Fly()
37 {
38 base.Move();
39 Console.WriteLine("汽车起飞成功!");
40 }
41 }
42 //在这里应用任何模式都很简单了
43 static void Main(string[] args)
44 {
45 FlyCar c = new FlyCar();
46 ((IFlyable)c).Fly();
47 ((Car)c).Move();
48 }
49
总结归纳:
其实类似的例子在我们的.NET Library里随处可见,例如Control类是继承于Component 和其他大量的接口的,而他们的基类却是MarshalByRefObject。

因为他们归功到底又属于引用对象。

从上面的描述中,我们可以得出结论:
接口:
是某类行为或功能的抽象。

是一种开关或者是契约。

所以从字面上来理解就非常清楚了,西方神话中有很多和魔鬼定下契约来使自己的力量得到提升的故事。

你必须定下这个契约才能得到你想要的力量。

抽象类:
对具体对象的最高抽象,这个对象拥有自己的最基本特征。

所以,从整体上来讲,抽象类和接口本质上都是是系统的最高抽象。

从实际上来讲,二者抽象的对象不一样,就这一点导致了他们二者的应用的截然不同。

3句话:
1、接口抽象行为,抽象类抽象对象
2、用抽象类来实现接口。

子类再继承基类
3、抽象类和接口本质上都是是系统的最高抽象
对象和接口(通俗讲解)
最近,还是看到很多人在问对象和接口的问题。

我原本以为,这已经不是个问题了,但是现在看来,它还困扰着很多程序员。

其实这个问题很简单,举例说明吧:
你是一个对象,继承自你的父母,你的gf也是一个对象,继承自她的父母,只有你和你的gf发生关系(比如打kiss)的时候,才会出现接口。

这是接口的本质,接口就是一个对象要和另外一个对象发生关系时的协议。

很多误导人的书,把接口说成是为了解决多重继承问题,其实是作者不懂,而且还在误导别人。

从下面的例子可以分析一下
type
TSun = class(TParent, ISomeInterface)
....
end;
持以上观点的人,只是从现象上看到,诶,这不是c++的多重继承吗?
错了,
上面的写法,真实的含义,应该是这样的,TSun,继承于TParent,说明TSun有TParent 大多数特性,还可能有自己的一些新特性,或者TParent没有完成的虚特性,TSun也完成了。

这里主要解决代码复用问题。

但是,从语义上,却不能说TSun继承自ISomeInterface,ISomeInterface的出现说明这样一个问题:TSun,希望它的调用者按ISomeInterface的标准调用自己。

一切,都很清楚了,接口,和硬件的接口,协议,是一回事,跟面向对象没有任何关系,接口的出现,基于这样一个事实,对象间会发生关系,而接口具体明确的规定了发生关系的协议。

就像一台电脑,本身是一个对象,但是至少又有电源,开关两个接口,人机交互又需要键盘和显示器两个接口。

所以,上面的例子是说,我遵守ISomeInterface接口,只要按ISomeInterface接口调用我,不会有任何问题。

从面向对象的角度看,public部分的东西,就是接口,只不过,interface的出现,更加强调了这个事实。

它是大规模合作开发时的协议,是开发团队成员间必须遵守的规范。

相关文档
最新文档