黑马程序员技术交流社区

标题: 虚方法和抽象类的问题 [打印本页]

作者: liangdmaster    时间: 2014-7-8 21:28
标题: 虚方法和抽象类的问题
本帖最后由 liangdmaster 于 2014-7-13 23:50 编辑

感觉越学越糊涂了,什么情况下用虚方法什么情况下用抽象类呢?感觉差不多。

作者: 签发    时间: 2014-7-8 21:51
例如:你可以定义一个抽象door类,门有close和open的方法。也定义到这个抽象类里。抽象类着重继承关系。如果两个东西可以看成继承关系,用抽象类。   用的多了,自然就熟了
作者: _xixi_    时间: 2014-7-8 21:53
抽象类是一种规范,抽象类是被继承的。首先,如果你不继承的话,抽象类完全没有存在的意义;其次,抽象方法是没有方法体的,也就是说抽象类无法实例化(如果能够实例化,怎么调用没有方法体的抽象方法)。所以只能通过子类继承来重写父类的抽象方法,从而实现多态。
虚方法有方法体,当这个方法所在的类有必要实现这个方法的时候,而这个类的派生类对这个方法有不同的表现形式的时候,可以用虚方法实现多态。
作者: 向晓伟    时间: 2014-7-8 22:05
基类里实现共性部分、各子类实现个性部分时可以用虚方法。
完全不同的行为就用抽象方法。
比如狮子和豹子的捕猎行为,就可以用虚方法。因为有共同的部分,比如狮子和豹子都是潜伏,再冲刺。但是狮子咬脖子,豹子咬肚子。。
狮子和豹子的叫声,就用抽象方法。因为完全不同。
作者: 渐渐的起飞    时间: 2014-7-8 23:54
你自己先列个表,2个做下比较就,这样理解更深刻些,我以前就是这样学的,只不过那张纸找不到了
作者: FrancisTan    时间: 2014-7-9 08:23
虚方法只能用在非抽象类中吗?
抽象方法只能存在于抽象类中?
作者: 致立    时间: 2014-7-9 21:27
如果你的父类不需要被实例化,那么你就可以将其设置成抽象类,就好比一种抽象的东西。虚拟的就是和其相对应的了。
作者: liangdmaster    时间: 2014-7-9 22:44
_xixi_ 发表于 2014-7-8 21:53
抽象类是一种规范,抽象类是被继承的。首先,如果你不继承的话,抽象类完全没有存在的意义;其次,抽象方法 ...

谢谢,这么描述我懂了很多

作者: czwanglei    时间: 2014-7-11 21:31
当有人回复后,请及时把帖子编辑为提问结束,这样版主才给你加分
作者: liangdmaster    时间: 2014-7-12 20:17
czwanglei 发表于 2014-7-11 21:31
当有人回复后,请及时把帖子编辑为提问结束,这样版主才给你加分

老师啊,我都找了好几天了,这个“提问结束”到底在哪儿呢?
作者: 绿箭    时间: 2014-7-12 20:28
FrancisTan 发表于 2014-7-9 08:23
虚方法只能用在非抽象类中吗?
抽象方法只能存在于抽象类中?

第二个问题我知道{:2_30:}:当一个类中有抽象方法时这个类就必须加abstract,也就是说抽象方法只能存在于抽象类中。
作者: czwanglei    时间: 2014-7-13 22:48
liangdmaster 发表于 2014-7-12 20:17
老师啊,我都找了好几天了,这个“提问结束”到底在哪儿呢?

你去找你发的帖子下面有个编辑,点开在那里可以看到的
作者: liangdmaster    时间: 2014-7-13 23:52
czwanglei 发表于 2014-7-13 22:48
你去找你发的帖子下面有个编辑,点开在那里可以看到的

哦,找到了,谢谢老师。
作者: czwanglei    时间: 2014-7-14 17:28
liangdmaster 发表于 2014-7-13 23:52
哦,找到了,谢谢老师。

没事的,有什么事,随时联系我
作者: 一十二。    时间: 2014-7-14 17:41
学到了,其实我也不是很会,话说虚方法是什么
作者: liangdmaster    时间: 2014-7-14 22:22
czwanglei 发表于 2014-7-14 17:28
没事的,有什么事,随时联系我

老师我还真有个问题想问您,我想报十五期的黑马班,是先交学费的,那还用赞够技术分再面试吗?还是直接能面试了?打听过传智这边,各种说法不一。
作者: liangdmaster    时间: 2014-7-14 22:52
一十二。 发表于 2014-7-14 17:41
学到了,其实我也不是很会,话说虚方法是什么

想学习虚方法最好和抽象类一块儿对比的学,这样能够体会的深刻一点。看视频吧,这样学的系统一点。

作者: czwanglei    时间: 2014-7-15 11:56
liangdmaster 发表于 2014-7-14 22:22
老师我还真有个问题想问您,我想报十五期的黑马班,是先交学费的,那还用赞够技术分再面试吗?还是直接能 ...

你这个问题要找.net负责老师,蔡老师QQ2355535407
作者: c19t043    时间: 2014-7-16 09:07
如果要实现多态,能使用抽象类的就使用抽象类
抽象类,除了不能实例化,和类,几乎没差别
你可以把,抽象类中的抽象方法,想成是 虚方法的 进阶版,
子类,继承父类中的虚方法,子类可以不用重写
但是
如果父类是抽象类,抽象类有抽象方法,
那么,子类就必须重写,抽象方法


作者: 昕☆Rainbow    时间: 2014-7-16 14:13
FrancisTan 发表于 2014-7-9 08:23
虚方法只能用在非抽象类中吗?
抽象方法只能存在于抽象类中?

虚方法可以存在于任何类中
抽象方法只能存在于抽象类中
作者: suzhousongkan    时间: 2014-7-16 15:11
抽象类:是这样一种类,描述了事物的共性,它不能实例化,只能通过它的子类实例化。
抽象方法:抽象方法一定是抽象类里面的,抽象的方法没有主体,就是没有实现代码,它的实现是由子类实现的。
说说虚方法:标记为虚方法的方法,可以在子类被重写。也就说子类可以变异。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2