`
chenruieye
  • 浏览: 38060 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JAVA面向对象概念之抽象与接口的意思以及区别

    博客分类:
  • Java
 
阅读更多
抽象类不可以被实例化,而且里面的方法有时候是空的,如果声明为抽象方法的话甚至没有方法体。那抽象类有什么用?但是抽象类可以被继承,我们可以设计一个“中国人”继承“人类”并重写人类中的抽象方法。这样使用的时候我们可以这样
Human aMan; 
aMan = new Chinese(); 

这样在声明的时候我们并不需要知道是中国人还是美国人,或者日本猪。直到具体指向某个对象的时候才知道。这很有用。假设我们有一个方法可以,输入一个人,可以返回这个人说的语言。简单举例
public String language(Human aMan) 
{ 
if(aMan.nationality=="中国") 
return == "Chinese"; 
if(aMan.nationality=="美国") 
return "English"; 
}

aMan的类型在设计的时候并不知道是中国人还是美国人,所以就用他们功能的父类 人类。
这就是java的向上转型机制。当然,如果只是这样简单的用人类并不一定要抽象类,具体类也可以被继承。但这就涉及到我们编写程序的时候逻辑问题了。有时候你设计一个类,并不希望使用你这个类的人直接实例化,太抽象的东西实例化是没有意义的,就要用到抽象类了。
接口就更加抽象了,它里面的方法不允许有方法体。它也不能被实例化,也不能被继承。那他到底有什么用? 它可以被“实现”
interface Human{ 
void run(); 
void walk(); 
} 


上面人类这个接口有两个抽象方法。

实现这个接口就是

public class Chinese implements Human {
//......
}

你可以简单地理解为这样和继承差不多。但是区别在哪里呢?因为在java中是不可以多重继承的。这样将导致很多问题。所以接口就是用来弥补这个不能多重继承的缺陷。显然,一可以同时实现很多个接口。以达到多重继承的效果。


+++++++++++++++++++++++++++++++++++++++1)接口中不能有非抽象方法,但抽象类中可以有。

2)一个类能实现多个接口,但只能有一个父类。

3)接口并不属于继承结构,它实际与继承无关,因此无关的类也可以实现同一个接口。

抽象类和方法
在我们所有乐器(Instrument)例子中,基础类Instrument内的方法都肯定是“伪”方法。若去调用这些方法,就会出现错误。那是由于Instrument的意图是为从它衍生出去的所有类都创建一个通用接口。
之所以要建立这个通用接口,唯一的原因就是它能为不同的子类型作出不同的表示。它为我们建立了一种基本形式,使我们能定义在所有衍生类里“通用”的一些东西。为阐述这个观念,另一个方法是把Instrument称为“抽象基础类”(简称“抽象类”)。若想通过该通用接口处理一系列类,就需要创建一个抽象类。对所有与基础类声明的签名相符的衍生类方法,都可以通过动态绑定机制进行调用(然而,正如上一节指出的那样,如果方法名与基础类相同,但自变量或参数不同,就会出现过载现象,那或许并非我们所愿意的)。
如果有一个象Instrument那样的抽象类,那个类的对象几乎肯定没有什么意义。换言之,Instrument的作用仅仅是表达接口,而不是表达一些具体的实施细节。所以创建一个Instrument对象是没有意义的,而且我们通常都应禁止用户那样做。为达到这个目的,可令Instrument内的所有方法都显示出错消息。但这样做会延迟信息到运行期,并要求在用户那一面进行彻底、可靠的测试。无论如何,最好的方法都是在编译期间捕捉到问题。
针对这个问题,Java专门提供了一种机制,名为“抽象方法”。它属于一种不完整的方法,只含有一个声明,没有方法主体。下面是抽象方法声明时采用的语法:
abstract void X();
包含了抽象方法的一个类叫作“抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。否则,编译器会向我们报告一条出错消息。
若一个抽象类是不完整的,那么一旦有人试图生成那个类的一个对象,编译器又会采取什么行动呢?由于不能安全地为一个抽象类创建属于它的对象,所以会从编译器那里获得一条出错提示。通过这种方法,编译器可保证抽象类的“纯洁性”,我们不必担心会误用它。
如果从一个抽象类继承,而且想生成新类型的一个对象,就必须为基础类中的所有抽象方法提供方法定义。如果不这样做(完全可以选择不做),则衍生类也会是抽象的,而且编译器会强迫我们用abstract关键字标志那个类的“抽象”本质。
即使不包括任何abstract方法,亦可将一个类声明成“抽象类”。如果一个类没必要拥有任何抽象方法,而且我们想禁止那个类的所有实例,这种能力就会显得非常有用。
接口
“interface”(接口)关键字使抽象的概念更深入了一层。我们可将其想象为一个“纯”抽象类。它允许创建者规定一个类的基本形式:方法名、自变量列表以及返回类型,但不规定方法主体。接口也包含了基本数据类型的数据成员,但它们都默认为static和final。接口只提供一种形式,并不提供实施的细节。
接口这样描述自己:“对于实现我的所有类,看起来都应该象我现在这个样子”。因此,采用了一个特定接口的所有代码都知道对于那个接口可能会调用什么方法。这便是接口的全部含义。所以我们常把接口用于建立类和类之间的一个“协议”。有些面向对象的程序设计语言采用了一个名为“protocol”(协议)的关键字,它做的便是与接口相同的事情。
为创建一个接口,请使用interface关键字,而不要用class。与类相似,我们可在interface关键字的前面增加一个public关键字(但只有接口定义于同名的一个文件内);或者将其省略,营造一种“友好的”状态。
为了生成与一个特定的接口(或一组接口)相符的类,要使用implements(实现)关键字。我们要表达的意思是“接口看起来就象那个样子,这儿是它具体的工作细节”。除这些之外,我们其他的工作都与继承极为相似
分享到:
评论

相关推荐

    java面向对象的概念

    Java面向对象的概念是Java编程的核心思想,它模拟真实世界中对象和类的模型,以便于构建复杂的软件系统。面向对象编程(Object-Oriented Programming,OOP)的主要目标是提高代码的可重用性、可维护性和灵活性。 1....

    Java面向对象程序设计

    《Java面向对象程序设计》和《Java面向对象程序设计习题解答与实验》这两本书籍将涵盖这些知识点,并通过习题解答和实验环节帮助学习者巩固理解。使用超星阅读器浏览这些资源,不仅可以学习理论知识,还能通过实践...

    Java-Java面向对象抽象类和接口实现教程

    通过学习这个Java面向对象抽象类和接口实现的视频教程,你将能够更好地理解如何在实际项目中应用这些概念,提高代码的可重用性和灵活性。在实际编程过程中,不断实践和熟悉这些面向对象设计原则,将使你的代码更加...

    Java面向对象程序设计课后答案全解

    Java面向对象程序设计是计算机科学中的一个重要领域,它基于面向对象编程(OOP)原则,为开发者提供了构建复杂软件系统的方法。本资源包含了该课程所有章节的课后习题答案,帮助学习者深入理解Java语言的面向对象...

    面向对象和抽象类和接口的理解

    在Java、C++、Python等语言中,面向对象是核心特性之一。 **面向对象的三大基本特征:** 1. **封装**:封装是面向对象的核心概念,它将数据(属性)和操作这些数据的方法(函数)捆绑到一起,形成一个独立的对象,...

    java实验 面向抽象与接口编程

    面向抽象与接口编程是Java编程中的核心概念,它体现了面向对象设计的原则,旨在提高代码的灵活性、可扩展性和可维护性。在这个实验中,我们将深入探讨这两个关键概念,并通过实践来理解它们在实际编程中的应用。 ...

    Java面向对象应用程序开发

    Java面向对象应用程序开发是软件开发领域中的核心主题,尤其对于初学者和专业开发者而言,理解并掌握这一技术至关重要。Java语言以其强大的面向对象特性、跨平台兼容性以及丰富的类库,成为了开发各种类型应用程序的...

    Java面向对象程序设计耿祥义版课件

    下面将详细阐述Java面向对象编程的基本概念、主要特点以及其在实际开发中的应用。 一、面向对象编程基础 1. 类与对象:类是创建对象的模板,描述了一组具有相同属性和行为的对象。对象则是类的实例,拥有类定义的...

    Java面向对象程序设计(第二版)

    综上所述,《Java面向对象程序设计(第二版)》所涉及的知识点大致涵盖了面向对象编程的核心概念、类与对象、接口与抽象类、包的使用、异常处理机制、集合框架,以及I/O操作等。这些知识点构成了Java编程语言的基础...

    Java面向对象程序设计+源代码+课后习题答案)

    Java面向对象程序设计是计算机科学中的一个重要领域,它基于面向对象编程(OOP)的概念,是一种强大的编程范式。在Java中,OOP的核心概念包括类、对象、封装、继承、多态等。这本书"Java面向对象程序设计"由耿祥义和...

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

    面向对象与Java实现:抽象类、接口的深度解析 面向对象程序设计(OOP)是现代软件工程中的核心概念,它通过封装、继承、多态等特性来构建灵活、可复用和可扩展的代码结构。Java作为一门广泛使用的面向对象语言,提供...

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

    这个导图可以帮助学习者系统地理解和掌握Java面向对象编程的核心概念,以及各种相关的语法和用法。 适用人群: 这个资源适用于初学者和有一定Java基础的开发者。初学者可以通过导图了解和学习Java面向对象编程的...

    java面向对象课程设计(有程序和报告)

    Java面向对象课程设计是计算机科学领域中一个重要的实践环节,旨在帮助学生深入理解面向对象编程的概念和技巧。在这个课程设计中,学生通常会被要求完成一个实际的项目,使用Java语言来实现,同时需要提交详细的报告...

    《Java面向对象程序设计(第2版)》课件

    第二版的《Java面向对象程序设计》课件旨在深入浅出地介绍这一关键概念,帮助学习者掌握Java语言的基础以及面向对象编程的核心思想。下面将详细阐述Java面向对象编程的基本概念、特性及其在实际开发中的应用。 1. ...

    Java面向对象程序设计 例子源代码

    Java面向对象程序设计是计算机科学中的一个重要领域,它基于面向对象编程(OOP)的理念,强调将现实世界的问题抽象为类和对象,从而更高效、更直观地进行软件开发。这个压缩包包含了一系列的Java源代码示例,由...

    Java 接口.pdf Java面向对象设计 - Java接口 什么是接口? Java中的接口定义了一个引用类型来创建抽象概念

    Java接口是面向对象编程中的一个重要概念,它通过定义一组抽象行为规范来提高代码的复用性和灵活性。掌握接口的使用对于理解和编写高质量的Java代码至关重要。通过本篇文章的学习,相信您已经对Java接口有了深入的...

    java 面向对象概念介绍

    ### Java面向对象概念详解 #### 一、面向对象的基本概念 面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它通过模拟现实世界中的对象及其交互方式来构建软件系统。Java作为一种典型的面向...

    Java面向对象程序设计课本例题源代码

    这份压缩包包含了书中各个章节的例题源代码,是学习和理解Java面向对象编程概念的宝贵资源。下面我们将详细探讨这些源代码所涵盖的知识点,并结合Java的核心特性进行解析。 1. **类与对象**:在Java中,一切皆为...

Global site tag (gtag.js) - Google Analytics