`
welcomezhang
  • 浏览: 16859 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java回顾之面向对象二:抽象类、接口

阅读更多

抽象类
抽象类
用关键字abstract修饰的类叫做抽象类,抽象类不能被实例化,即不能new出来一个抽象类的对象(实例)。
 注:抽象类可以定义引用,可以用这个引用去访问子类实例对象.

抽象方法
用abstract关键字所修饰的方法叫做抽象方法。

  • 抽象方法必须定义在抽象类中。
  • 抽象方法有声明,无实现(没有花括号{},有花括号但是内容为空也是一种实现,空实现)。 相对应的有声明有实现的方法可以叫做具体方法。

抽象类和抽象方法的关系

  • 抽象方法必须定义在抽象类里面。
  • 如果一个类包含了抽象方法,那么这个类一定要声明成抽象类。
  • 如果某个类是抽象类,那么这个类既可以包含抽象方法,也可以包含具体的方法(有声明,有实现)。
  • 抽象类中如果全是具体方法也是允许的;抽象类也可以是空的,即什么也不包含。



抽象类的用途
抽象类的抽象方法定义一个规范,或者叫做约定,具体实现交给子类来做。
因为抽象类的实现可能无法完成或者没有意义。
举个例子:
定义一个抽象类Shape,然后Triangle,Circle和Rectangle等继承Shape,Shape中定义一个抽象方法计算面积,然后各个子类中实现这个方法,计算各自的面积。

这时候如果不用抽象类和抽象方法,即Shape类是一个普通的类,也可以完成这样的功能,即通过用子类方法覆盖父类方法的方式。但是此时父类,即Shape中的方法就要提供具体的实现,首先不知道怎么计算这个抽象的形状的面积,如果父类面积定义一个常数,如0或1,又显得意义不明晰。

 


接口
接口技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现。接口不是类,而是一组对类的需求描述,这些类要遵从接口描述的统一格式进行定义。一个类可以实现(implement)一个或多个接口,并在需要接口的地方,随时使用实现了相应接口的对象。

接口的特征

  • 接口用关键字interface声明。
  • 接口的地位等同于class,接口中的所有方法都是抽象方法。接口中在定义方法的时候,可以使用abstract关键字,也可以省略abstract关键字,(大多数时候都是省略的),方法仍是抽象的,不能有实现的花括号。
  • 接口中的所有方法自动地属于public,因此在接口中声明方法时,不必提供关键字public。但是在实现接口时,必须把方法声明为public。在接口中还可以定义成员变量(常量),接口中的域被自动地设为public static final。然而,接口绝不能含有实例域,也不能在接口中实现方法,提供实例域和方法实现的任务应该由实现接口的那个类来完成。

 

note:

C++允许一个类有多个超类,此特性称为多继承(multiple inheritance),而Java的设计者选择了不支持多继承,使用接口机制来实现多继承的大部分功能。


抽象类vs接口
联系

 

  • 接口和抽象类的功能类似,接口也不能实例化,可以将接口看作是一种特殊的抽象类(全是抽象方法)。
  • 接口的多态用法和抽象类也类似,接口类型的引用可以指向实现了这个接口的类的对象。

 

区别

  • 接口中的方法必须全是抽象方法;而抽象类中的方法,可以有抽象的,也可以有具体的方法。
  • 类可以实现接口,用关键字implements。Java是单继承的,但是却可以实现多个接口。(一个类可以同时继承另一个类,并且实现多个接口。)
  • 如果一个类实现了一个接口,并且这个类不是抽象类,那么这个类必须实现这个接口中的所有方法。如果是抽象类,则无需实现接口中的所有方法。


多态

所谓多态,就是父类型的引用可以指向子类型的对象,或者接口类型的引用可以指向实现该接口的类的实例。
关于接口与实现接口的类之间的强制类型转换方式与父类和子类之间的强制类型转换方式完全一样。(见下面的多态文章链接)。

分享到:
评论

相关推荐

    JAVA 面向对象程序设计第4章 抽象类和接口.pptx

    第4章 抽象类与接口;回顾;本章内容;4.1 抽象类;4.1 抽象类;4.1.1 抽象方法和抽象类;4.1.1 抽象方法和抽象类;4.1.1 抽象方法和抽象类;4.1.1 抽象方法和抽象类;4.1.1 抽象方法和抽象类;4.1.1 抽象方法和抽象类;4.1.2 ...

    Java面向对象知识点梳理(思维导图)

    导图中包含了类、对象、继承、多态、封装等基本概念,同时也包括了接口、抽象类、异常处理、泛型等高级特性。这个导图可以帮助学习者系统地理解和掌握Java面向对象编程的核心概念,以及各种相关的语法和用法。 适用...

    Java面向对象知识点的思维导图

    导图中包含了类、对象、继承、多态、封装等基本概念,同时也包括了接口、抽象类、异常处理、泛型等高级特性。这个导图可以帮助学习者系统地理解和掌握Java面向对象编程的核心概念,以及各种相关的语法和用法。 适用...

    《java面向对象程序设计-继承和多态》教案.doc

    第四章 面向对象的概念和 Java 实现-2 回顾 类是具有相同属性和行为的一组对象的 集合 , 对象是类的实例 封装是隐藏对象实现细节的过程,以便不让用户看到实现的细节 类可用Class 来定义,类的变量和方法可被该类的...

    《Java程序设计案例教程》教学课件05深入Java面向对象.pptx

    模块5 深入Java面向对象 《Java程序设计案例教程》教学课件05深入Java面向对象全文共47页,当前为第1页。 学习目标 01 了解Java面向对象程序设计的思想原则。 02 掌握类的结构、定义及对象的创建和使用。 03 掌握...

    程序开发原理:抽象、规格与面向对象设计.[美]Barbara Liskov(带详细书签).pdf

    7.6 抽象类 103 7.7 接口 106 7.8 复合实现 107 7.9 子类型的含义 112 7.10 类型层次的讨论 117 7.11 小结 118 练习 119 第8章 多态抽象 121 8.1 多态数据抽象 121 8.2 使用多态数据抽象 123 8.3 重新访问...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    第6章 Java的类(Class)和对象(Object) 132 教学视频:59分钟 6.1 驾驶汽车向类(Class)的世界进发 132 6.1.1 汽车带来的问题 132 6.1.1 类的组成 134 6.1.3 使用自定义的Car类 136 6.1.4 类和对象 139 ...

    Java2游戏编程.pdf

    第3章 带有类的语言:Java面向对象程序设计 3.1 设计一个Java类 3.2 方法的魔法 3.3 关于方法的更多话题 3.3.1 构造函数方法 3.3.2 访问方法 3.3.3 类方法 3.3.4 “其他”方法 3.4 继承 3.5 抽象类 3.6 类修饰符 3.7...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    第6章 Java的类(Class)和对象(Object) 132 教学视频:59分钟 6.1 驾驶汽车向类(Class)的世界进发 132 6.1.1 汽车带来的问题 132 6.1.1 类的组成 134 6.1.3 使用自定义的Car类 136 6.1.4 类和对象 139 ...

    JAVA基础课程讲义

    异常的处理办法之二,声明异常: throws子句 101 方法重写中声明异常原则 102 异常的处理办法之三,手动抛出异常,throw子句 103 自定义异常 103 使用异常机制建议 104 总结 105 思考作业 105 上机作业 105 第五章 ...

    Java语言的科学与艺术 斯坦福大学经典教材

    11.11 编程练习 第12章 搜索与排序 12.1 搜索 12.2 排序 12.3 评估算法效率 12.4 使用数据文件 12.5 小结 12.6 复习题 12.7 编程练习 第13章 数组与ArrayList类 13.1 ArrayList类回顾 13.2 HashMap类 13.3 Java集合...

    Java语言的科学与艺术(国外计算机科学经典教材)

    本书采用现代面向对象方法,从零开始介绍最有用的类层次结构,全文使用图形和交互式程序,充分激发学生的学习兴趣。本书使用传记简介、引用以及哲学片段来突出计算的历史和理性背景,着重强调算法和问题解决,而今天...

    Java开发技术大全 电子版

    第2篇Java面向对象编程 第3章对象和类98 3.1面向对象的基本概念98 3.1.1对象98 3.1.2类99 3.1.3消息101 3.1.4面向对象的4个基本特征101 3.2类与对象104 3.2.1类的基本结构104 3.2.2类的声明104 3.2.3创建...

    C++数据抽象和问题求解(第6版).[美]Frank M. Carrano(带详细书签).pdf

    这本经典、畅销的数据结构教材详细介绍了数据抽象的基础知识,强调作为面向对象方法基础原理的规范和实施之间的区别。书中使用的软件工程原则和概念以及UML图便于增强学生的理解。 ◆ 详细介绍了数据抽象,强调规范...

    Scala程序设计(第2版)

    8.8 调用父类构造器(与良好的面向对象设计) 226 8.9 嵌套类型 230 8.10 本章回顾与下一章提要 232 第9章 特征 233 9.1 Java 8中的接口 233 9.2 混入trait 234 9.3 可堆叠的特征 238 9.4 ...

    C#微软培训资料

    15.5 抽象类与接口 .195 15.6 小 结 .196 第十六章 组织应用程序 .198 16.1 基 本 概 念 .198 16.2 使用名字空间 .200 16.3 使用指示符 .203 16.4 程 序 示 例 .206 16.5 小 结 .213 第十七章 文 件 ...

    精通ANDROID 3(中文版)1/2

    1.1 面向新PC的全新平台  1.2 Android的历史  1.3 Dalvik VM剖析  1.4 理解Android软件栈  1.5 使用Android SDK开发最终用户应用程序  1.5.1 Android模拟器  1.5.2 Android UI  1.5.3 Android基础...

    精通Android 3 (中文版)2/2

    1.1 面向新PC的全新平台  1.2 Android的历史  1.3 Dalvik VM剖析  1.4 理解Android软件栈  1.5 使用Android SDK开发最终用户应用程序  1.5.1 Android模拟器  1.5.2 Android UI  1.5.3 Android基础...

Global site tag (gtag.js) - Google Analytics