1.是使用了iterator()方法同时创建了一个“it”对象吗?接口不是要通过“接口类 对象名 = new 接口实现类”来创建对象,再使用对象名来使用方法的吗?如果不是。没有创建对象,那如何通过“it”使用hasNext()方法,也就是it.hasNext()。
2.看了一下其他人的评论。有的说是:“通过coursesToSelect调用iterator()方法返回一个构造器给it”。 然后我的疑问是:构造机是“初始化块”吗?还是说构造器就是构造方法?通过过一个方法返回一个构造方法或初始化块,我在网上没查到相关资料。 如果说构造器是初始化块,而在后面的代码又通过“it”使用到了hasNext()也就是it.hasNext()。那是不是说“初始化块”内可以写入方法,相对于不用创建对象而使用方法的内部类?
courseToSelect 是List接口的属性,因为Lis接口继承了Collection接口,Collection接口里有个iterator方法,作用是返回Iterator迭代器的对象,所以可以用Iterator类接收,it就是迭代器的对象名。我也是刚学两三天,不知道理解的到不到位,希望有大佬可以指教
搜索
复制
楼上对问题一的解答还是不够全面,按照你所说“开头的“Iterator”声明了对象类型为Iterator。但是这不是说把Iterator实例化(实例化就是创建对象)。只是规定了对象的类型。”那我想请问,这个对象“it”从何而来?
问题一:
接口不可以通过“接口类 对象名 = new 接口实现类”来创建对象,再使用对象名来使用方法。
接口是要被实现的,它是抽象类,不可以被实例化(创建对象)。
有代码“Iterator it = coursesToSelect.irerator()”。开头的“Iterator”声明了对象类型为Iterator。但是这不是说把Iterator实例化(实例化就是创建对象)。只是规定了对象的类型。你应该把它理解为调用了一个返回值为对象的方法,把他传给“it”这个对象名,并且声明对象为Iterator类型。
PS: iterator()方法是java.lang.Iterable接口,被Collection继承。所以Collection里面有iterator这个方法,隐藏ArrayList里面也就有这份方法。所以就可以用ArrayList的对象名“coursesToSelect”来调用这个方法。
问题二:
构造器是初始化块也是构造方法,是同一个东西的不同名称,只会执行一次,在创建对象的时候执行。“返回一个构造方法”我没听过这种说法,方法只能返回各种数据类型和对象。
构造器本身就是方法块,他能调用方法。构造器只能在初始化的时候执行一次,有时候你没有写,那就好自动给你一个默认的,所有实例化的对象都有构造器。
你问构造器可不可以写入方法。方法是可以被调用的,构造器无法调用。但是它可也能执行方法的功能,比如说赋值。你可以把方法的功能写在构造器里面,这些功能在初始化的时候自动执行。