比如对于HashMap与Map的理解:
HashMap是Map接口的典型实现类,Map是接口,是键值对的集合。
建议在实现接口的方法中使用Map。 例如,MapString,Object parameters=new HashMap (;
不推荐。 HashMapString,Object parameters=new HashMap (;
第一个更灵活,第二个就这样写死了。 如果要更改其他Map实现类,则必须重写。 在接口中实现时,“第一个”只需要替换后面的实现类。
http://www.Sina.com/http://www.Sina.com /
需要实现喂猫和喂狗两种方法时
如果EED(Catcat )…} feed (Dogdog )…}cat、dog都是Animal的子类,就可以写
feed (animal animal (…) animal dog1=newdog ); //父类引用是子类对象Animal cat1=newCat (; EED(dog1; EED(cat1; 这是面向接口的编程,不需要在意调用方调用的是哪个对象,只对接口编程即可,降低了调用方对调用方完全透明的程序的结合性
父类引用指向子类对象的好处:可以随时替换子类。 这意味着您可以随时替换具体实现,而无需修改其他实现。
好处一:降低代码耦合度,让程序员关注业务的时候,更加关注父类能做什么,而不去关心若干个子类具体是怎么做的
例如,最基本的方法之一equals,他是Object类的一种方法,完整的格式是publicbooleanequals(objectobj )
此处的参数类型使用Object,因为Object是所有类的父类,所以调用此方法时可以将此参数传递给Object的子类对象,即任何对象
如果没有多态性这个方法,就不能这样写。 参数只能写一个具体的类。 这个方法的适用范围只有这个类。 请参阅。 请参阅。
让你更关注父类能做什么,而不去关心子类是具体怎么做的
假设您有Animal的父类和Dog,Cat的子类
如果在代码里,提前申请
私有动画; 这样的好处是什么呢? an的实际类型可以在运行时具体确定,其可以是Dog Cat或Animal。 因为你会写:
an=new Animal (; 也可以写:
an=new Dog (; 或者
an=new Cat () ); 如果你从一开始就声称是Dog an的话; 你的an只有Dog会导致代码不够灵活,扩展时扩展变得不方便。