这道低有什么作用了 倒不如 直接有继承或直接有多态二者选一个就够了,真是搞的人糊涂啊, 在网让找的资料 ,
都是用男人和女人在举例子, 在这里高手们能不能用实际的代码为我举个实际点的例子了 谢谢打家了 这个问题一直纠结这我 望大家能帮我解决一下
16 个解决方案
#1
如果你设计通用框架的话,多态在设计构架上会非常有用处的。建议去看看框架的源代码。
#2
给你举一个最简单的例子吧,假设你要设计一个通用框架,这个框架会涉及到数据库的操作,但是你不能限定用户用哪个数据库,这个时候你就可以用到多态。
你可以设计一个接口:DataBaseDao
然后,每个不同的数据库,你可以编写接口的实现类,比如:SQLServerDao, MySqlDao, DB2Dao等等
当用户使用你框架的时候,他就可以用多态,实现自己的数据库连接功能:
DaoBaseDao dao = new SQLServerDao(); //针对SQLServer的接口实现,这里dao就是多态
dao.connect();
大概就是这样
你可以设计一个接口:DataBaseDao
然后,每个不同的数据库,你可以编写接口的实现类,比如:SQLServerDao, MySqlDao, DB2Dao等等
当用户使用你框架的时候,他就可以用多态,实现自己的数据库连接功能:
DaoBaseDao dao = new SQLServerDao(); //针对SQLServer的接口实现,这里dao就是多态
dao.connect();
大概就是这样
#3
可以增强代码的健壮性,只管按照父类的设计进行操作,不管具体是什么样的子类,将来这个子类用着不舒服了,换一个就行,不影响原来的代码,这样代码维护起来就更加容易
#4
举个例子吧
class Car{
void run(){
...
}
}
class BMW extends Car{}
class Benz extends Car{}
实现的时候
Car car = new BMW();
car.run();
将来你开着觉得难受,直接将new BMW()换成 new Benz()就可以了,完全不影响别的代码。
如1楼所说,这个在框架设计上更是大有所为
class Car{
void run(){
...
}
}
class BMW extends Car{}
class Benz extends Car{}
实现的时候
Car car = new BMW();
car.run();
将来你开着觉得难受,直接将new BMW()换成 new Benz()就可以了,完全不影响别的代码。
如1楼所说,这个在框架设计上更是大有所为
#5
++
#6
就象一样东西有几种形态,在设计时有时候不管什么形态;有时候我知道鱼能游泳就行了,而不管是鲫鱼还是鲤鱼,那是DNA去负责的问题了...
#7
简单说,就是父类定义通用的属性、方法,多个子类实现可以省去这些公用的代码,省力一大笔!而且,将来如果对这些通用的属性、方法有何更改,只需改父类即可,维护起来就是比较方便、快捷、准确!可以想象1W个子类维护这些通用的方法的困难度及工作量!
#8
其实刚开始只是你没有分清楚他们之间的区别,才会有这样的问题;建议多写几个类,多考虑自己写的代码的重用性
4楼举的类很实用
4楼举的类很实用
#9
你首先要明白你所说的‘父类的引用可以指向子类的对象‘ 有什么好处。
好处就是可以解耦合,比如你需要一个List类,你可以这样实例化ArrayList list = new ArrayList();
也可以List list = new ArrayList();
那么现在的问题来了 现在的需求是ArrayList已经无法满足你的要求了,你需要换成LinkedList,如果按照第一种写法那么你需要做的工作可能比较多了,除了修改list的类型,还要考虑的是你换成LinkedList的时候,你之前用ArrayList所调用的方法LinkedList是没有的,这倒也及加多了你的工作量。
如果你按第二种方式来实现,那么你只需将List list = new LinkedList()即可,你无须在担心之前所调用的方法
。 当然现在更好的做法,是把List list;通过spring来修改的,这样的话就完全不需要改变代码了,也就符合设计原则的几大思想了。楼主在认真想想,应该就能理解的了。
当然多态并不只有你这种情况哦,同样的方法名,参数不同也为多态。。
好处就是可以解耦合,比如你需要一个List类,你可以这样实例化ArrayList list = new ArrayList();
也可以List list = new ArrayList();
那么现在的问题来了 现在的需求是ArrayList已经无法满足你的要求了,你需要换成LinkedList,如果按照第一种写法那么你需要做的工作可能比较多了,除了修改list的类型,还要考虑的是你换成LinkedList的时候,你之前用ArrayList所调用的方法LinkedList是没有的,这倒也及加多了你的工作量。
如果你按第二种方式来实现,那么你只需将List list = new LinkedList()即可,你无须在担心之前所调用的方法
。 当然现在更好的做法,是把List list;通过spring来修改的,这样的话就完全不需要改变代码了,也就符合设计原则的几大思想了。楼主在认真想想,应该就能理解的了。
当然多态并不只有你这种情况哦,同样的方法名,参数不同也为多态。。
#10
再贴一个我自己以前写的笔记吧
http://blog.csdn.net/superhill/article/details/7526627
希望能帮助你理解
http://blog.csdn.net/superhill/article/details/7526627
希望能帮助你理解
#11
这个东西得实际去编程体会,靠别人教是教不出感觉的.多写写代码就好了
#12
大家都说很好啊,我试图从抽象角度说一点吧
多态(polymorphism)是以一种看待事物更细致的角度来描述事物(或者说以抓住了这种特质的独具慧眼的角度),事物多具有本质(共性),也有各种不同的变化形态(比如碳元素会有金刚石和石墨两种形态),各形态都有其独特作用,但是万变不离其宗,它们以共性相联,是基于这种独特而深刻的认识。
当要利用这种物体的各个形态时,有形态变化的物体,使用起来更灵活。比如你事先预估到自己要用到人形机器人来让他干精细活,和交通工具来代步。这时候如果你想到的是变形金刚,可能对于你今后的使用要方便很多,一物重用且随时随地切换,使用灵活,当然代价是初始的设计比较麻烦。但如果你没想到要用变形金刚这种多态的工具,而是分别想到的人形机器人和汽车,也未尝不可,只不过使用起来要麻烦得多,切换也不灵活。
多态(polymorphism)是以一种看待事物更细致的角度来描述事物(或者说以抓住了这种特质的独具慧眼的角度),事物多具有本质(共性),也有各种不同的变化形态(比如碳元素会有金刚石和石墨两种形态),各形态都有其独特作用,但是万变不离其宗,它们以共性相联,是基于这种独特而深刻的认识。
当要利用这种物体的各个形态时,有形态变化的物体,使用起来更灵活。比如你事先预估到自己要用到人形机器人来让他干精细活,和交通工具来代步。这时候如果你想到的是变形金刚,可能对于你今后的使用要方便很多,一物重用且随时随地切换,使用灵活,当然代价是初始的设计比较麻烦。但如果你没想到要用变形金刚这种多态的工具,而是分别想到的人形机器人和汽车,也未尝不可,只不过使用起来要麻烦得多,切换也不灵活。
#13
多态的主要表现就是方法的重写和方法的重载。方法重写是父子之间,方法重载则是对自身而言。希望对楼主有用!
#14
等你用框架的时候,你就知道为什么需要用这个多态 ,你用那个数据库连接驱动的时候,他就是多态的体现。。。
#15
是的,你现在还体会不到,到你用框架了,可以面向接口编程。解耦很好
#16
工厂模式
#1
如果你设计通用框架的话,多态在设计构架上会非常有用处的。建议去看看框架的源代码。
#2
给你举一个最简单的例子吧,假设你要设计一个通用框架,这个框架会涉及到数据库的操作,但是你不能限定用户用哪个数据库,这个时候你就可以用到多态。
你可以设计一个接口:DataBaseDao
然后,每个不同的数据库,你可以编写接口的实现类,比如:SQLServerDao, MySqlDao, DB2Dao等等
当用户使用你框架的时候,他就可以用多态,实现自己的数据库连接功能:
DaoBaseDao dao = new SQLServerDao(); //针对SQLServer的接口实现,这里dao就是多态
dao.connect();
大概就是这样
你可以设计一个接口:DataBaseDao
然后,每个不同的数据库,你可以编写接口的实现类,比如:SQLServerDao, MySqlDao, DB2Dao等等
当用户使用你框架的时候,他就可以用多态,实现自己的数据库连接功能:
DaoBaseDao dao = new SQLServerDao(); //针对SQLServer的接口实现,这里dao就是多态
dao.connect();
大概就是这样
#3
可以增强代码的健壮性,只管按照父类的设计进行操作,不管具体是什么样的子类,将来这个子类用着不舒服了,换一个就行,不影响原来的代码,这样代码维护起来就更加容易
#4
举个例子吧
class Car{
void run(){
...
}
}
class BMW extends Car{}
class Benz extends Car{}
实现的时候
Car car = new BMW();
car.run();
将来你开着觉得难受,直接将new BMW()换成 new Benz()就可以了,完全不影响别的代码。
如1楼所说,这个在框架设计上更是大有所为
class Car{
void run(){
...
}
}
class BMW extends Car{}
class Benz extends Car{}
实现的时候
Car car = new BMW();
car.run();
将来你开着觉得难受,直接将new BMW()换成 new Benz()就可以了,完全不影响别的代码。
如1楼所说,这个在框架设计上更是大有所为
#5
++
#6
就象一样东西有几种形态,在设计时有时候不管什么形态;有时候我知道鱼能游泳就行了,而不管是鲫鱼还是鲤鱼,那是DNA去负责的问题了...
#7
简单说,就是父类定义通用的属性、方法,多个子类实现可以省去这些公用的代码,省力一大笔!而且,将来如果对这些通用的属性、方法有何更改,只需改父类即可,维护起来就是比较方便、快捷、准确!可以想象1W个子类维护这些通用的方法的困难度及工作量!
#8
其实刚开始只是你没有分清楚他们之间的区别,才会有这样的问题;建议多写几个类,多考虑自己写的代码的重用性
4楼举的类很实用
4楼举的类很实用
#9
你首先要明白你所说的‘父类的引用可以指向子类的对象‘ 有什么好处。
好处就是可以解耦合,比如你需要一个List类,你可以这样实例化ArrayList list = new ArrayList();
也可以List list = new ArrayList();
那么现在的问题来了 现在的需求是ArrayList已经无法满足你的要求了,你需要换成LinkedList,如果按照第一种写法那么你需要做的工作可能比较多了,除了修改list的类型,还要考虑的是你换成LinkedList的时候,你之前用ArrayList所调用的方法LinkedList是没有的,这倒也及加多了你的工作量。
如果你按第二种方式来实现,那么你只需将List list = new LinkedList()即可,你无须在担心之前所调用的方法
。 当然现在更好的做法,是把List list;通过spring来修改的,这样的话就完全不需要改变代码了,也就符合设计原则的几大思想了。楼主在认真想想,应该就能理解的了。
当然多态并不只有你这种情况哦,同样的方法名,参数不同也为多态。。
好处就是可以解耦合,比如你需要一个List类,你可以这样实例化ArrayList list = new ArrayList();
也可以List list = new ArrayList();
那么现在的问题来了 现在的需求是ArrayList已经无法满足你的要求了,你需要换成LinkedList,如果按照第一种写法那么你需要做的工作可能比较多了,除了修改list的类型,还要考虑的是你换成LinkedList的时候,你之前用ArrayList所调用的方法LinkedList是没有的,这倒也及加多了你的工作量。
如果你按第二种方式来实现,那么你只需将List list = new LinkedList()即可,你无须在担心之前所调用的方法
。 当然现在更好的做法,是把List list;通过spring来修改的,这样的话就完全不需要改变代码了,也就符合设计原则的几大思想了。楼主在认真想想,应该就能理解的了。
当然多态并不只有你这种情况哦,同样的方法名,参数不同也为多态。。
#10
再贴一个我自己以前写的笔记吧
http://blog.csdn.net/superhill/article/details/7526627
希望能帮助你理解
http://blog.csdn.net/superhill/article/details/7526627
希望能帮助你理解
#11
这个东西得实际去编程体会,靠别人教是教不出感觉的.多写写代码就好了
#12
大家都说很好啊,我试图从抽象角度说一点吧
多态(polymorphism)是以一种看待事物更细致的角度来描述事物(或者说以抓住了这种特质的独具慧眼的角度),事物多具有本质(共性),也有各种不同的变化形态(比如碳元素会有金刚石和石墨两种形态),各形态都有其独特作用,但是万变不离其宗,它们以共性相联,是基于这种独特而深刻的认识。
当要利用这种物体的各个形态时,有形态变化的物体,使用起来更灵活。比如你事先预估到自己要用到人形机器人来让他干精细活,和交通工具来代步。这时候如果你想到的是变形金刚,可能对于你今后的使用要方便很多,一物重用且随时随地切换,使用灵活,当然代价是初始的设计比较麻烦。但如果你没想到要用变形金刚这种多态的工具,而是分别想到的人形机器人和汽车,也未尝不可,只不过使用起来要麻烦得多,切换也不灵活。
多态(polymorphism)是以一种看待事物更细致的角度来描述事物(或者说以抓住了这种特质的独具慧眼的角度),事物多具有本质(共性),也有各种不同的变化形态(比如碳元素会有金刚石和石墨两种形态),各形态都有其独特作用,但是万变不离其宗,它们以共性相联,是基于这种独特而深刻的认识。
当要利用这种物体的各个形态时,有形态变化的物体,使用起来更灵活。比如你事先预估到自己要用到人形机器人来让他干精细活,和交通工具来代步。这时候如果你想到的是变形金刚,可能对于你今后的使用要方便很多,一物重用且随时随地切换,使用灵活,当然代价是初始的设计比较麻烦。但如果你没想到要用变形金刚这种多态的工具,而是分别想到的人形机器人和汽车,也未尝不可,只不过使用起来要麻烦得多,切换也不灵活。
#13
多态的主要表现就是方法的重写和方法的重载。方法重写是父子之间,方法重载则是对自身而言。希望对楼主有用!
#14
等你用框架的时候,你就知道为什么需要用这个多态 ,你用那个数据库连接驱动的时候,他就是多态的体现。。。
#15
是的,你现在还体会不到,到你用框架了,可以面向接口编程。解耦很好
#16
工厂模式