面向对象基础之抽象类与接口 上

在两年前学习C++的时候,知道抽象类这么一个概念,当时并不是很理解,如今在学习C#和设计模式的时候,再一次碰到了这个含糊不清的东西,同时又在C#中学习到了接口技术,接口也早有耳闻,但是当时理解的接口就是一个或者一组能够操作类中数据的函数或者方法。虽然老师举过很多例子,比如电视机这个事物,它对外的接口就是遥控器,遥控器里好多的按钮,按钮的下面就是各种各样的命令或者称之为方法。

当抽象类遇到接口的时候,顿时蒙圈了,这两个概念的确是让人很难区别,那么我今天就来总结一下抽象类和接口到底有哪些区别和联系,以便能够深刻的理解和运用它们。

首先来看抽象类,抽象类是一种特殊的类,是为了抽象的目的而建立的,建立抽象类,就是为了通过它多态的使用其中的成员函数,为一个类族提供统一的操作界面。抽象类处于类层次的上层,一个抽象类自身无法实例化,也就是说我们无法声明一个抽象类的对象,而只能通过继承机制,生成抽象类的非抽象派生类,然后再实例化。

举个例子来讲,对于我们人类来讲,可以分为中国人、美国人、德国人等等,中国人还可以分出汉族和少数民族等。一个人,TA必定属于世界上的某个国家和某个民族。脱离国家和民族的纯粹“抽象”意义上的人是没有的。人类只是我们创造的一个高度抽象的概念,不存在人类本身的实例,但是由人类这个“抽象类”不断派生,我们可以得到各种各样的,特征不断具体化的“人”,最终得到一个具体的人。

抽象类有几点值得我们注意:第一,抽象类绝对不能实例化;第二,抽象方法必须被子类重写;第三,如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他的一般方法。第四,在声明抽象类的时候让其拥有尽可能多的共同代码,拥有尽可能少的数据。

抽象类通常代表一个抽象概念,它提供了一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的,所以,在一个以继承关系形成的等级结构里面,树叶节点应当是具体类,而树枝节点均应当是抽象类。

在C#中我们用abstract关键字来声明类和方法为抽象类和抽象方法,抽象方法没有方法体,具体格式如下:

abstractclass 类名

{

public  abstract string 方法名()

}

抽象类在C++中和C#是有所不同的,在C++中抽象类中的函数成员称为纯虚函数,同样也是没有函数体,并且在声明的时候必须初始化为0。具体的定义和语法格式就不再给大家介绍了,因为我们目前重点接触的是C#。

时间: 2024-10-07 03:54:14

面向对象基础之抽象类与接口 上的相关文章

面向对象基础之抽象类与接口 下

在上篇博文中我们一起了解了抽象类,那么什么是接口呢?下面给大家简单介绍一下: 所谓接口,就是把隐式公共方法和属性组合起来,以封装特定功能的一个集合.一旦类实现了接口,类就可以支持接口所指定的所有属性和成员.声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式,因此接口不能实例化,不能有构造方法和字段,不能有修饰符,如public等.在实现接口的类中必须实现接口中的所有方法和属性. 一个接口可以支持多个接口,多个类也可以支持相同的接口.需要注意的是,接口用interface关

java面向对象编程(八)--抽象类、接口

1.抽象类 1.1抽象类概念 当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]. //抽象类的必要性[Demo124.java] public class Demo124 { public static void main(String[] args) { //Animal an=new Animal();抽象类不允许实例化 Animal an=new Cat(); an.cry(); an=new Dog(); an.cr

黑马程序员——Java基础——面向对象——继承、抽象类、接口、多态、包、内部类、异常等

第一讲 继承 1.继承: 当多个类拥有相同的功能时,那么这些类不需要每个都写这些相同的功能,只需要把相同功能抽到 一个单独的类中,继承这个类就能获得这些相同的功能: (1)继承的体系结构:就是对要描述的事物进行不断的向上抽取,就出现了体系结构. 要了解这个体系结构中最共性的内容,就看最顶层的类. 要使用这个体系的功能,就用最底层的类创建对象 (2)好处: A.提高代码复用性: B.继承的出现,让类与类之间产生关系,为多态的前提 (3)特点: A.只能单继承(准确的说是java对多继承进行优化,避

面向对象设计中抽象类与接口的区别

在OOD(面向对象设计)中,经常会用到抽象类或接口,[注:在C++中,没有接口的概念,只有抽象类:而在Java中两者都存在].而在使用过程中,也许会有不少人认为接口和抽象类差不多,然后就想当然地觉得可以相互完全替换.事实上,虽然他们有很多相似点,但也有很大差异. 1.抽象类与接口的出现条件 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样.并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类.抽象类往往用来表征我们

java基础知识--抽象类与接口

抽象类与接口 1.Java 抽象类 1.引言: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象, 这样的类就是抽象类. 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量.成员方法和构造方法的访问方式和普通类一样. 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用.也是因为这个原因,通常在设计阶段决定要不要设计抽象类. 2.在Java语言中使用abstract class来定义

《Java技术》第三次作业--面向对象——继承、抽象类、接口

一)学习总结 1.阅读下面程序,分析是否能编译通过?如果不能,说明原因.应该如何修改?程序的运行结果是什么?为什么子类的构造方法在运行之前,必须调用父 类的构造方法?能不能反过来? class Grandparent { public Grandparent() { System.out.println("GrandParent Created."); } public Grandparent(String string) { System.out.println("Gran

Java基础之抽象类和接口

抽象类和接口 一.抽象类和抽象方法 对于抽象类,首先需要介绍抽象方法,而抽象类因抽象方法的存在而存在 1.抽象方法 (1)必要性: 有些父类方法不确定如何写方法体,但是对于继承它的子类又必须用到这个方法.需要用到抽象方法 例如:对于动物类,我们知道父类“动物”会叫,但是因为不同的动物叫的方法不同,而对于子类”狗“这个子类又必须用到“叫”这个方法.因此对于父类“动物”的“叫”方法不知道怎么去写.这里就用到抽象方法. 代码示例: 1 //抽象类讲解 2 public class test抽象类 {

Java基础:抽象类和接口

一.引言 基于面向对象五大原则中的下面两个原则,我们应该多考虑使用接口和抽象类: 里氏替换原则:子类可以通过实现父类接口来替换父类,所以父类应尽可能实现为接口/抽象类,方便拓展程序而不影响现有代码. 依赖倒置原则:和结构化设计不同,我们要让底层依赖于高层,而不是相反. 而设计接口和抽象类时尽量遵循面向对象五大原则中的"接口隔离原则",即使用专门接口比使用单一接口好.这个准则和针对类设计的"单一职责原则"对应. 备注:设计模式中有很多和接口和抽象类相关的模式,比如抽象

java基础之抽象类与接口的区别

在学习java的过程中,或者是在找工作笔试或面试的时候,如果你是java岗位,那么抽象类与接口的区别无疑是一个大热点,是各大公司都想要考的一个小知识点,下面是我为了9月份秋招自己总结的,若有不对的地方,欢迎指正. 此处,借鉴了http://www.cnblogs.com/dolphin0520/p/3811437.html,写的很不错. 一.抽象类 使用了abstract关键字所修饰的类叫做抽象类.抽象类无法实例化,也就是说,不能new出来一个抽象类的对象(实例). 抽象方法:使用abstrac