黑马程序员技术交流社区
标题:
关于接口的一些疑问
[打印本页]
作者:
pphdsny3
时间:
2012-8-15 14:29
标题:
关于接口的一些疑问
本帖最后由 黑马王鹏 于 2012-8-15 14:33 编辑
import java.util.*;
public class MapDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,String> m = new HashMap<String,String>();
//疑问:Map不是接口么?为什么可以成为new HashMap的对象实例呢?
m.put("01", "wp5");
m.put("02", "wp2");
m.put("03", "wp3");
System.out.println(m);
}
}
复制代码
作者:
dev
时间:
2012-8-15 14:36
Map是接口,我们不能直接new一个Map的实例,
但是我们
可以new一个Map的实现类
,如HashMap或TreeMap,
然后用Map来接收这个实现类
。
这也是一种多态的体现,这种是面向接口编程的一种好习惯
,方便以后的扩展和更新。
比如你现在new了一个HashMap的实例,下次想要换TreeMap,只要需要修改实现类,
而不用修改父类,这样非常方便。
作者:
周瑞
时间:
2012-8-15 14:42
本帖最后由 周瑞 于 2012-8-15 14:45 编辑
HashMap是基于哈希表的 Map 接口的实现的。所以可以用map来申明对象,而它的实例化可以由HashMap实现。
这样做的原则是依赖倒置原则。
作者:
郑彬
时间:
2012-8-15 14:46
这也是一种多态的体现。
1,多态的体现
父类或者接口的引用指向或者接收自己的子类对象。
2,多态的前提
必须是类与类之间有关系,要么继承,要么实现。
通常还有一个前提:就是存在覆盖。
3,多态的好处
多态的出现大大提高了程序的扩展性和后期可维护性。
4,多态的弊端:
虽然提高了扩展性,但是只能使用父类的引用访问父类中的成员。
5,多态的应用
匿名内部类等。
作者:
张忠豹
时间:
2012-8-15 14:56
package exception;
import java.util.HashMap;
import java.util.Map;
interface AAA{
public void say();
}
class BBB implements AAA{
public void say(){
System.out.println("hello boy");
}
public void show(){
System.out.println("watching");
}
}
public class TestMap {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String, String> m = new HashMap<String, String>();
// 疑问:Map不是接口么?为什么可以成为new HashMap的对象实例呢?
/**
* Map的确是接口,但是HashMap实现了Map,即Map里面的非私有方法,HashMap都已经实现了
* 此处m引用HashMap对象,相当于上转型对象,(这种对象只能操作Map里面有的函数,而不能操作Map里没有而HashMap里有的函数)这就是多态的体现
* 多态的体现:父类引用指向子类对象;父类的引用也可以接受自己子类的对象
* 多态的前提:必须类与类之间有关系,要么是继承关系,要么是实现关系;通常还有一前提,存在覆盖
* */
m.put("01", "wp5");
m.put("02", "wp2");
m.put("03", "wp3");
System.out.println(m);
AAA aa = new BBB();
aa.say();
//aa.show();//调用子类特有的方法,编译通不过
}
}
作者:
pphdsny3
时间:
2012-8-15 15:05
谢谢大家,基本知道是这么回事了!!问题已解决!
作者:
杨宗彬
时间:
2012-8-15 18:46
父类引用指向子类对象
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2