黑马程序员技术交流社区

标题: 方法重写是多态的必须条件么? [打印本页]

作者: wayonEmes    时间: 2015-7-25 18:41
标题: 方法重写是多态的必须条件么?
本帖最后由 wayonEmes 于 2015-7-31 00:49 编辑

为什么要说有方法重写是多态的前提呢?有的说方法不重写多态没有意义,这句话不是很懂啊,能不能帮忙解释一下或举例说明一下为什么会没有意义
作者: wayonEmes    时间: 2015-7-26 23:01
大家帮忙看一下哈,谢谢大家
作者: 差不多冬至    时间: 2015-7-26 23:08
是的,不重写也可以但是没意义
作者: n361204357    时间: 2015-7-26 23:12
继承是多态的前提,继承不重写就没有意义了,飞机是一个类,只能飞,我想要战斗机,能打仗。假如再造一个飞机出来,飞机永远还是只能飞。那要继承这个概念就没什么用了。你应该多理解继承出现的原因:多个类有相同属性,行为,可以用现有类去构建一个新类。作用:1,提高代码复用。2,让类与类之间产生了一个关系。理解这个就行。
面向对象就是强调结果的一门语言,不用知道为什么格式为什么要这样,你只要知道怎么用就行。这是个人的理解,不到之处还望见谅。
作者: wayonEmes    时间: 2015-7-26 23:18
n361204357 发表于 2015-7-26 23:12
继承是多态的前提,继承不重写就没有意义了,飞机是一个类,只能飞,我想要战斗机,能打仗。假如再造一个飞 ...

假如是这样呢,虽然没有方法重写,可是一样也有新的功能加入啊
class A{
  void fly(){}
}
class B extends A{
  void fight(){}
}
作者: n361204357    时间: 2015-7-26 23:22
wayonEmes 发表于 2015-7-26 23:18
假如是这样呢,虽然没有方法重写,可是一样也有新的功能加入啊
class A{
  void fly(){}

你老爸老实,你吃喝嫖赌。
作者: wayonEmes    时间: 2015-7-26 23:31
n361204357 发表于 2015-7-26 23:22
你老爸老实,你吃喝嫖赌。

.....:L
这就是照着那个飞机说的啊,没有重写飞的方法,添加了战斗方法
作者: CharnLau    时间: 2015-7-26 23:39
本帖最后由 CharnLau 于 2015-7-26 23:50 编辑

继续用飞机的例子吧!飞机会飞,但是飞机怎么飞?直升机会飞,战斗机会飞,但是他们的飞行方式不一样,直升机和战斗机是飞机的两种形态,所以当你继承飞机的时候,你需要重写飞机飞行的方法。如果你不重写方法,那战斗机和直升机的飞行方式就一样了!
面向对象是一个抽象的念,类也是抽象的概念,把具体事务的共有属性或者行为抽取出来封装在一个新的类中,属性不需要重写,直接赋值就可以!但是行为需要重写,因为同一种事物的多种形态的同一种行为的行为方式不同,不重写方法,那行为的方式就都一样了!那就不是多态了!
建议楼主把多态的概念和作用理解好来!

作者: umbriel    时间: 2015-7-26 23:49
一个父类的fuc()对应多个子类的fuc(),如果fuc()不重写的话那建立子类对象有什么意义呢
作者: n361204357    时间: 2015-7-27 00:04
wayonEmes 发表于 2015-7-26 23:31
.....
这就是照着那个飞机说的啊,没有重写飞的方法,添加了战斗方法

你老爸老实,不阻碍你个人的扩展。
作者: 小城青年    时间: 2015-7-27 00:28
对啊,不重写就没有什么意义了啦!
作者: 田利阳    时间: 2015-7-27 00:43
是的         
作者: 陈鹏No1    时间: 2015-7-27 12:29
不重写好像调用的是父类的方法
作者: 一把年纪学编程    时间: 2017-7-18 15:27
多态一个重要作用是扩展,
当写一个工具类-动物,它要驾驭所有情况(猫会粘人,狗会看门,狼会打猎...等等)
就会把动物类作为形参接收具体的实参对象,这里就是多态
而方法重写,就是每个动物吃的东西都不一样,
class Animal {
      eat ( 吃 );
}
class Cat  extends Animal {
     eat ( 鱼 );
}
class Dog extends Animal  {
     eat( 骨头 );
}




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