abstract public class MibData implements Cloneable
{
private LinkedHashMap mibInfo = new LinkedHashMap();
public LinkedHashMap getMibInfoMap()
{
String[][] arr = getMibInfoArr(); for (int i = 0; i < arr.length; i++ )
{
mibInfo.put(arr[i][1], arr[i][0]);
} return mibInfo;
}
abstract protected String[][] getMibInfoArr();
}
请问getMibInfoMap()方法实现什么样的功能,abstract protected String[][] getMibInfoArr();这句怎么解释?
getMibInfoMap() 就是把返回的这个二维字符串数组赋值给一个LinkedHashMap并返回,其中键为二维数组每行的第1个元素,值为二维数组每行的第0个元素
abstract public class MibData implements Cloneable
{
private Map mibInfo = new LinkedHashMap(); public Map getMibInfoMap()
{
String[][] arr = getMibInfoArr(); for (int i = 0; i < arr.length; i++ )
{
mibInfo.put(arr[i][1], arr[i][0]);
} return mibInfo;
}
abstract protected String[][] getMibInfoArr();
}
你没看到 Map map = new LinkedHashMap();你学过面向对象吗?楼主的给他点提示,我都不想说了
哈哈 map是接口 啊,老大,你还是不懂
getMibInfoMap() 返回的东西是实现了Serializable, Cloneable, Map<K,V> 三个接口的LinkedHashMap ,这个LinkedHashMap 比单纯的Map要有更多的“功能”(Serializable, Cloneable)如果你改成Map,无端端约定的功能就少了(Serializable, Cloneable)
再者,LinkedHashMap 继承自HashMap,有clone, containsKey, entrySet, isEmpty, keySet....等方法
单纯的Map接口是没有的说白了
如果方法是:LinkedHashMap getMibInfoMap()
我可以正常的 getMibInfoMap().entrySet();如果是:Map getMibInfoMap()
getMibInfoMap().entrySet();就危险了....当然,在你的实现是把mibInfo 赋了LinkedHashMap
但是你要注意,你的方法是要被调用的,你返回的是Map(因为你写的是Map)
调用者怎么知道你返回的到底是HashMap还是LinkeHashMap还是其他什么实现了Map的其他类?总之,如果改为Map getMibInfoMap() ,你的返回对象只能使用Map接口中的方法,使用其他方法,都是不可靠的;
{
go()
{
// 10KM/H;
}
}class BMW
{
go()
{
//400KM/H;
}
}class QQ
{
go()
{
//100KM/H;
}
}
然后public Car getACar()
{
return new BMW();
}Car c=getACar();
c.go(); //400KM/H 不同子类对父类的同一个行为有不同实现,在这种情况下,将方法返回的东西声明为父类,才是合理