关于javaAPI中接口中方法实现的理解

问题描述

由于刚学java,对于javaAPI中接口中的方法可以直接使用感到非常好奇,比如上面publicinterfaceIterator<E>是抽象的,但我可以使用booleanhasNext();它是在哪里实现的,我怎么可以通过Iterator对象来使用它。它背后的实现机制是什么?还是我根本就理解错了?求大神指点!!!

解决方案

解决方案二:
你说的iterator对象是i的引用吧,只能是实现了iterator接口的类的实例对象,既然继承了itrator就继承了itratoa的两个方法hasnext和next.hasnextnext方法实现的机制我不知道,但是hasnext返回的是集合是否还有下一个元素可以用来遍历,如果没有就返回一个false
解决方案三:
接口和抽象类是不可以实例化的,但可以声明变量吧,并可以指向实现了此接口类型的任何对象吧;以ArrayList为例:你看下API就会发现ArrayList实现了Iterable,而Iterable有个方法:Iterator<T>iterator()返回一个在一组T类型的元素上进行迭代的迭代器。既然如此,a.Iterator是不是返回了一个实现了Iterator接口对象呢?而ArrayList的父类是AbstractList,你打开此类的iterator方法,就可以看到一个newItr()的语句,然后点击这个Itr,你就会发现privateclassItrimplementsIterator<E>是不是清楚了?
解决方案四:
这个涉及到的是多态的知识,题主可以去看看List<String>list=newArrayList<>();Iteratorit=list.iterator();System.out.println(it.getClass());

getClass()返回的是一个对象运行时的类型输出的结果是ArrayList$Itr所以it实际上的类型是ArrayList$Itr,而不是Iterator接口不能用来创建实例,但是可以用来声明变量之所以用Iterator来声明变量,是因为我们通常不知道调用iterator()方法后得到的是什么类型的迭代器,而Iterator是所有迭代器的父类,所以就需要使用Iterator来声明变量就像Object是所有类的父类一样Objectobj=newString("爱问人家的人");Objectobj=newInteger(5);

这样写都是没有问题的
解决方案五:
谢谢!哎,还是不会看API啊,要多看多写啊
解决方案六:
可以定义接口型的变量,指向接口的具体实现,这样这个接口变量就灵活很多楼主多看看接口和abstract类,看看接口定义的好处设计模式中,大量应用了接口的定义,spring也是面向接口的编程,易于更改具体的实现。
解决方案七:
哈哈当年我也有这样的疑惑总是搞不清到底哪儿实现了这个方法其实接口实例化的时候使用的具体的实现类来实例化的比如List接口,一般用List<Object>list=newArrayList<>();这样的方式来实例化。所以当list.add(newObject())的时候,其实用的是ArrayList里面的add方法。

时间: 2025-01-31 07:06:39

关于javaAPI中接口中方法实现的理解的相关文章

C#3.0 中使用扩展方法来扩展接口

有关扩展方法的一些知识点请参看我的前篇博客:C#3.0 中的扩展方法 (Extension Methods)前篇博客中我重点介绍了两个特殊场景:1.扩展方法跟原来类的方法重名时候的处理逻辑2.扩展方法的嵌套现在我们来看扩展方法使用的第三个场景:使用扩展方法来扩展接口 应用场景举例:我们有时候会发现最初定义的一个接口,在现在环境下,这个接口需要再增加一个函数.有了扩展方法后,我们在这种情况下又多了一种实现的选择.下面以代码来说明这个问题:namespace Hongjun.Guo{interfac

C#实现两接口中同名方法实例分析

  本文实例讲述了C#实现两接口中同名方法.分享给大家供大家参考.具体分析如下: 对于一个类实现两个接口,而这两个接口又有同名方法,C#中的处理方式如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 using System; using

php中调用其他系统http接口的方法说明

  本篇文章主要是对php中调用其他系统http接口的方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 使用函数: file_get_contents($url); 传入接口url及其参数:如 $url="http://192.168.1.1/test.jsp?id=1&type=2"; $ret=file_get_contents($url);

java接口中定义的常量的访问方法

我们在定义常量的时候,可以把常量定义在接口里面,如: packageorg.zy.demo.base; publicinterfaceInterfaceDemo{ finalStringname="thisismyname"; } 上面是我定义的接口和常量. 常量的定义没有指明publicstatic 我实现此接口: packageorg.zy.demo.base; publicclassInterfaceImplimplementsInterfaceDemo{ } 那么我们如何访问呢

java 接口 接口实现-Java中一个类如何实现多个接口中同名同参返回值不同的方法?

问题描述 Java中一个类如何实现多个接口中同名同参返回值不同的方法? 如:` class A implements Interface1,Interface2{ //这里该怎么写呢? } interface Interface1{ public void method(); } interface Interface2{ public int method(); } 解决方案 class A implements Interface1,Interface2{ //直接写啊 public voi

java接口中的方法和变量为啥都必须是public?

问题描述 java接口中的方法和变量为啥都必须是public? 假如这个接口A是public 的,那么其他包里的类B就可以实现这个接口A, 实现本身就隐含的包括了继承,那么为啥A中的方法不能是protected呢?因为类B可以覆盖A中的protected方法啊. 请各位帮忙分析下,谢谢! 解决方案 http://www.cnblogs.com/dolphin0520/p/3811437.html 解决方案二: 假如你引用第三方的jar 呢? 解决方案三: public也可以覆盖.既然是接口,那么

vc#-VC#中接口也能new么?new一个方法是什么意思?

问题描述 VC#中接口也能new么?new一个方法是什么意思? VC#中接口也能new么?new一个方法是什么意思?new和override的区别 解决方案 接口不能new,但是可以new一个接口的实现类. 比如 interface I {} class A : I {} I a = new A(); new修饰方法,表示这个方法不是继承基类的,而是定义一个无关的同名的方法.override是函数重写.基类需要有一个对应的虚方法.

link中如何从接口中调用一个方法的参数的类型似乎不对是怎么回事?

问题描述 link中如何从接口中调用一个方法的参数的类型似乎不对是怎么回事? link中如何从接口中调用一个方法的参数的类型似乎不对是怎么回事?

java新手:接口中的方法在用的时候还要实现,为什么还要定义。

问题描述 java新手:接口中的方法在用的时候还要实现,为什么还要定义. 接口困扰好久了求解答.纯属新手提问.请勿揍脸................................................................................................................................... 解决方案 好好看看java基础知识,.封装,继承,多态 解决方案二: 没有接口,就没办法自定义代码. 用过Java的排