自定义(设计)一个java中存在的类 实质是 新建子类(类名自定)之后来继承Java中存在的这个类 继而对其方法进行重写实现自定义的方法
以下是设计一个自带泛型的ArrayList类的示例——只能存放那两个类:
import test.testFile;
import test.Stack;
import java.util.ArrayList;
public class SomeString extends ArrayList {
public boolean canAdd(Object o)
{
if (o instanceof testFile || o instanceof Stack) {
super.add(o);
}
return true;
}
public boolean add(Object o)
{
return this.canAdd(o);
}
public void add(int index,Object element)
{
if(this.canAdd(element))
{
super.add(index, element);
}
}
}
实质还是考验了 继承的知识 示例代码中的方法重写依然用到了super这个关键字来调用ArrayList这个父类的方法。
细节:
设计的自带泛型的ArrayList这个类其实就是在ArrayList原有的方法套了判断的外壳if语句判断是否是指定的两个类 所以和容易忽略instanceof——用于判断该对象是否是指定的类实例化的。
遍历:
1、仅仅用普通的for循环
每次定义一个引用指向对象 之后取出
可以用size()和get()分别得到大小,和获取指定位置的元素,结合for循环就可以遍历出ArrayList的内容
2、使用迭代器进行遍历
List这个类中 自带迭代器Iterator这个方法
迭代器是用hasNext()判断是否有下一个 有就取出指针下移 直到为空返回false 迭代完毕。
为方便书写 也可以直接导入Iterator 这个接口——import java.util.Iterator; 进行定义该类型的引用去指向List这个类的引用所调用的方法iterator
给出以下两种关于利用Iterator迭代器遍历的写法
代码示例:
Iterator 这个类是List这个类的子类:
在迭代器Iterator 这是接口 中存在方法next()和Scanner类中的next()作用相近其作用一个是指针的作用 取出对象 另一个是输入作用
迭代器的for写法更为高效 但是需要类型转换
3、用增强型for循环
使用增强型for循环可以非常方便的遍历ArrayList中的元素,
不过增强型for循环也有不足:
无法用来进行ArrayList的初始化
无法得知当前是第几个元素了,当需要只打印单数元素的时候,就做不到了。 必须再自定下标变量(存入的时候)。
代码很简单 此处不作示例。。。。