`
welcomezhang
  • 浏览: 17494 次
  • 性别: 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面向对象知识点梳理(思维导图)

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

    面向对象Java课件

    4. **继承**:讲解如何声明和使用继承,super关键字的应用,以及抽象类和接口的区别。 5. **多态**:解释多态的概念,final关键字的作用,以及如何实现接口。 6. **方法的重写和重载**:通过实例演示这两者的区别...

    面向对象设计课件(JAVA)

    面向对象设计是编程领域中的核心概念,特别是在Java这种面向对象的语言中。本课件主要针对HKUST(香港科技大学)的面向对象设计课程,为学生提供深入理解和实践这一关键概念的资源。面向对象设计(Object-Oriented ...

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

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

    面向对象程序设计Java听课笔记

    面向对象程序设计是计算机科学中的核心概念之一,Java语言作为其典型代表,广泛应用于软件开发。浙江大学翁恺老师的Java视频课程深入浅出地讲解了这一主题,这些笔记旨在帮助我们回顾和巩固Java开发的关键知识。 1....

    java 语言与 面向对象 程序设计题解及实验指导

    面向对象程序设计(Object-Oriented Programming,OOP)是Java的核心设计理念,它强调通过类和对象来组织和抽象程序,从而提高代码的复用性和可维护性。 本题解及实验指导主要涵盖了以下几个方面的Java语言和面向...

    Java面向对象程序设计期末复习试题(附解析)

    本复习试题集旨在帮助学生在期末考试前系统性地回顾和巩固Java面向对象编程的基本概念、原理及应用。试题包含了各种类型的问题,如选择题、填空题、简答题和编程题,全面覆盖了类、对象、封装、继承、多态等核心主题...

    Java语言与面向对象程序设计第10讲(继承与多态)

    首先,回顾面向对象设计中的基本概念。封装是将数据和操作这些数据的方法捆绑在一起,以保护数据不被外部直接访问,提供更安全的代码。抽象则是对现实世界中对象的抽象表示,它强调对象的特征而不关注其实现细节。...

    深圳职业技术学院——《面向对象程序设计(Java)》A 卷答案

    通过上述知识点的分析,我们不仅回顾了Java语言的一些基础语法,还深入探讨了面向对象编程的核心理念和实践技巧,这对于学习和掌握Java编程语言具有重要的意义。无论是变量类型转换、异常处理,还是类的设计、继承...

    西南交大面向对象课件+课程设计+期末复习资料

    4. **编码实现**:使用Java、C++或Python等面向对象语言实现设计的类和方法。 5. **测试与调试**:进行单元测试和集成测试,确保代码的正确性和性能。 期末复习资料则会汇总课程的重点,可能包括: 1. **概念回顾...

    java 面向对象的程序设计讲义

    ### Java面向对象程序设计讲义知识点总结 #### 一、课程基本信息与讲师介绍 - **课程编号**: EECS2030 Section M - **讲师**: Dr. Mufleh Al-Shatnawi - **办公地点**: 待定 (TBA) - **办公时间**: 每周二和周四...

    Tedu一段Java面向对象之继承

    ### Java面向对象之继承 #### 一、面向对象回顾与概念理解 面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据和处理这些数据的方法组织在一起形成对象。在Java中,面向对象的核心...

    java面对对象程序入门

    Java面向对象程序设计是计算机科学中的一个重要概念,尤其在软件开发领域中占据核心地位。Java语言作为面向对象的编程语言,其设计哲学是“一切皆为对象”。本教程旨在为初学者提供一个全面的入门指南,帮助理解Java...

    程序开发原理:抽象、规格与面向对象设计.[美]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 重新访问...

    北大面向对象技术

    北京大学信息科学技术学院的面向对象技术教程不仅回顾了传统开发方法的局限性,而且全面介绍了面向对象技术的基本原理、关键概念和实践优势。对于希望深入理解现代软件工程方法的学生和从业者来说,这份教程提供了...

    java2实用教程

    4.2 类:深入讲解了类的声明、构造方法、方法重载、继承等面向对象的核心概念。 4.3 对象:阐述了对象的创建、使用以及对象引用与实体之间的关系。 4.4 STATIC关键字:解释了static关键字的使用场景,包括静态变量和...

Global site tag (gtag.js) - Google Analytics