java中什么地方用java 抽象方法法

您所在的位置: &
详细介绍Java中的抽象数据类型
详细介绍Java中的抽象数据类型
本文主要介绍的是,java中的数据类型和抽象数据类型(ADT)的概念。我们还将通过介绍Java Collections Framework(Java 集合架构)来学习Java定义的一些ADT。
在本文中,我们将考察Java中的数据类型,但是我们将介绍抽象数据类型(ADT)的概念。我们还将通过介绍Java Collections Framework(Java 集合架构)来学习Java定义的一些ADT。
一个ADT是一个仅由保存的数据类型和可能在这个数据类型上进行的操作定义的。开发者们只能通过ADT的操作方法来访问ADT的属性,而且他们不会知道这个数据类型内部各种操作是如何实现的。
在Java中,我们常常使用一个接口来给出一个操作集合而不需要透露这些操作实现的细节。记住一个接口定义了一个方法集而Java类必须实现这个集合以便满足它的强制性条件或者实现这个接口的一个实例。
线性表,堆栈和队列
当我们谈论ADT的时候,经常会说到线性表,堆栈和队列。我们不会讨论这些数据结构的细节,但我们会讨论为什么它们被称为ADT。
一个线性表是有限个元素的集合,其元素以线性的方式进行排列并提供对它的元素的直接访问。一个堆栈是一个后进先出(LIFO)的有序线性表,元素从堆栈头加入,并从堆栈头取出。一个队列是一个先进先出的有序线性表,元素从队列尾加入,并从队列头取出。
线性表,堆栈和队列的内部结构可以用许多方式实现。例如,我们可以使用一个有序数组或者一个链表来实现每个结构。关键的一点是不论你如何实现其内部结构,它对外的接口总是不变的。这使得你能够修改或者升级底层的实现过程而不需要改变公共接口部分。
Java 集合架构
Java 2软件开发包(SDK)提供了一些新类来支持大多数常用的ADT。这些类被称为Java集合类(类似于MFC中的集合类),它们协同工作从而形成Java 集合架构。这个集合架构提供了一套将数据表示成所谓的集合抽象数据的接口和类。
java.util.Collection接口被用来表示任意的成组的对象,也就是元素。这个接口提供基本的诸如添加,删除,和查询这样的操作。Collection接口还提供了一个iterator方法。iterator方法返回java.util.Iterator接口的一个实例。而Iterator接口又提供了hasNext, next, 和 remove方法。使用Iterator接口提供的方法,你可以从头到尾循环遍历一个Collection对象中的实例并能够安全的删除iterator(游标)所表示的元素。
java.util.AbstractCollection 是所有集合架构类的基础。AbstractCollection 类提供了对java.util.Collection 接口中除iterator和size方法以外的所有方法的实现。这两个例外的方法由所有继承java.util.AbstractCollection的子类实现。
实现一个接口的类必须提供对所有接口方法的实现。因为集合架构中的一些接口方法是可选的,所以必须有一种方法来通知调用者某种方法没有实现。当一个可选的方法被实现而这个方法又并没有被实现的时候,就会抛出一个UnsupportedOperationException 异常。UnsupportedOperationException 类继承了RuntimeException 类。这使得调用者能够调用所有的集合操作而不需要把每次调用都放在一个try-catch对里。
List线性表
List接口继承了Collection接口并定义了一个允许相同元素存在的有序集合。List接口还附加了一些使用一个数值型索引值并基于元素在线性表中的位置来操作Collection中元素的方法。这些操作包括add,get,set和remove。
List接口还提供了listIterator方法。这个方法返回java.util.ListIterator 接口的一个实例,这个实例能够让你从头至尾或者从尾至头的遍历一个线性表。java.util.ListIterator 继承了java.util.Iterator 接口。因此,它支持对它代表的Collection中的元素的添加和修改。
下面的例子演示了如何从后向前遍历一个列表的元素。要完成这个工作,必须在遍历开始之前把ListIterator定位于列表最后一个元素之后。
ListIterator&iter&=&aList.listIterator(aList.size()); &while&(iter.hasPrevious()) &System.out.println(iter.previous().toString()); &}&
集合架构提供了对List接口的两个实现:LinkedList(链表)和ArrayList(数组列表,即静态列表)。这两个实现都支持对其元素的随机访问。一个ArrayList实例支持数组风格的操作并支持数组大小的改变操作。一个LinkedList的实例则提供了在列表开始和结尾添加,删除和提供元素的显式的支持。使用这些新方法,一个程序员可以简单的把一个LinedList当做堆栈或者队列使用,如下:
LinkedList&aQueue&=&new&LinkedList(aCollection); &aQueue.addFirst(newElement); &Object&anElement&=&aQueue.removeLast(); &LinkedList&aStack&=&new&LinkedList(aCollection); &aStack.addFirst(newElement); &Object&anElement=&aStack.removeFirst();&
表A中的代码片段使用java.util.ArrayList 和 java.util.LinkedList演示了对java.util.List接口的实现实例的一些常用的操作。这些操作包括添加元素,随机访问元素和显式的在列表尾删除元素。
知其然不知其所以然是大有好处的
ADT提供了一个将对象公共接口中的操作和其具体的实现分开的强有力的工具。这使得一个ADT的实现可以不断变化和演化同时保持其公共接口不变。Java集合架构提供了大量的接口和其实现用来代表基本元素的集合并可以用来创建有用的ADT。
【编辑推荐】
【责任编辑: TEL:(010)】
关于的更多文章
又是一周匆匆而过。上周五、周六两天,2013年51CTO云计算架构师
诞生于1991年的Java如今已经成为世界范围内应用最为广泛的编程语言之一,专题中...
又是一周匆匆而过。上周五、周六两天,2013年51CTO云
十一归来,貌似大家都没有什么劲头。本周五,为期两天
《待字闺中:编程面试题集》集合最新最全的面试经验和
这是一个最坏的年代,J2EE Web开发技术已经迟滞多年;这是一个最好的年代,J2EE Web开发技术的新变革留给勇于创新的人!
51CTO旗下网站当前访客身份:游客 [
当前位置:
共有3个答案
<span class="a_vote_num" id="a_vote_num_
Class&a&=&Class.forName("A");&
System.out.println(Modifier.isAbstract(a.getModifiers()));&
<span class="a_vote_num" id="a_vote_num_
利用反射机制获取函数的属性
<span class="a_vote_num" id="a_vote_num_
class 对象就可以判断
--- 共有 1 条评论 ---
具体哪个方法或属性呢?我就是没查到
(6个月前)&nbsp&
更多开发者职位上
有什么技术问题吗?
类似的话题带抽象方法的枚举
enum &Grade{//class &
& & A(&100-90&){ &
& & & & public String localeValue(){ &
& & & & & & return &优&; &
& & & & } &
& & B(&89-80&){ &
& & & & public String localeValue(){ &
& & & & & & return &良&; &
& & & & } &
& & C(&79-70&){ &
& & & & public String localeValue(){ &
& & & & & & return &一般&; &
& & & & } &
& & D(&69-60&){ &
& & & & public String localeValue(){ &
& & & & & & return &差&; &
& & & & } &
& & E(&59-0&){ &
& & & & public String localeValue(){ &
& & & & & & return &不及格&; &
& & & & } &
& & };//Object &
& & private S //封装每个对象对应的分数 &
& & private Grade(String value){ &
& & & & this.value = &
& & public String getValue(){ &
& & & & return this. &
& & public abstract String localeValue(); &
记住:枚举中的抽象方法,在创建枚举的对象的时候要实例化。
package com.feng. &
import org.junit.T &
public class Demo1 { &
& & @Test &
& & public void test(){ &
& & & & print(Grade.B); &
& & public void print(Grade g){ &
& & & & String value = g.localeValue(); &
& & & & System.out.println(value); &您还未登陆,请登录后操作!
java作业啊(抽象类和接口)!!!
ic static double sumArea(GeometricObject[] a)
编写测试程序,创建三个对象(一个圆、一个圆柱体和一个矩形)的数组,并使用sumArea方法求它们的总面积。
谢谢了!!!
GeometricObject.java
--------------------
public abstract class GeometricObject {
abstract double getArea();
--------------------
Circle.java
public class Circle extends GeometricObject {
public void setR(double r) {
public double getR() {
public double getArea() {
//System.out.println(&#034;圆形&#034;);
return Math.PI * Math.sqrt(r);
-----------------------------
Cylinder.java
public class Cylinder extends G
GeometricObject.java
--------------------
public abstract class GeometricObject {
abstract double getArea();
--------------------
Circle.java
public class Circle extends GeometricObject {
public void setR(double r) {
public double getR() {
public double getArea() {
//System.out.println(&#034;圆形&#034;);
return Math.PI * Math.sqrt(r);
-----------------------------
Cylinder.java
public class Cylinder extends GeometricObject {
// 底面半径
public double getH() {
public void setH(double h) {
public double getR() {
public void setR(double r) {
public double getArea() {
//System.out.println(&#034;圆柱体&#034;);
return Math.PI * Math.sqrt(r) * 2 + 2 * Math.PI * r *
----------------------------
Rectangle.java
---------------------------
public class Rectangle extends GeometricObject {
public double getArea() {
//System.out.println(&#034;矩形&#034;);
return h *
public double getH() {
public void setH(double h) {
public double getW() {
public void setW(double w) {
---------------------------------
测试!这里提供了一个构造GeometricObject数组的方法!
也可以不用,根据需要自定义!
public class MTest {
// 计算总和
public static double sumArea(GeometricObject[] a) {
double result = 0.0d;
for (int i = 0; i & a. i++) {
result = result + a[i].getArea();
// 创建一个GeometricObject数组
public static GeometricObject[] generateGOA() {
GeometricObject goa[] = new GeometricObject[3];
Circle goCir = new Circle();
goCir.setR(2);
goa[0] = goC
Cylinder goCy = new Cylinder();
goCy.setH(3);
goCy.setR(4);
goa[1] = goCy;
Rectangle goRec = new Rectangle();
goRec.setH(4);
goRec.setW(5);
goa[2] = goR
public static void main(String[] args) {
System.out.print(MTest.sumArea(MTest.generateGOA()));
从低到高 依次打补丁 。。。。。。。打到sp4哦
大家还关注

我要回帖

更多关于 java的抽象方法 的文章

 

随机推荐