java吧 关注:1,242,248贴子:12,714,320

新人请教各位大佬个问题,就是方法重写的意义是什么

只看楼主收藏回复

既然要沿用父类的方法格式为啥不直接定义个新方法名,然后用super关键字调用父类方法再修改,反而要定义个一样的方法名呢?我自己试了下,在子类中新定义个方法,然后在这个方法中通过super一样可以调用父类的方法,在这个基础上再进行修改也是可以呀?方法名相同难度不会混淆?重载我理解,重写实在难以理解


IP属地:山东1楼2022-03-27 11:54回复
    前面学这个主要是要你明白原理和怎么去用,到后面的高级阶段,只有你经历过了,你就明白为什么了


    IP属地:河南来自Android客户端2楼2022-03-27 12:43
    收起回复
      难道不是重写更方便,可读性更高?


      IP属地:上海来自Android客户端5楼2022-03-27 12:49
      回复
        举例,父类有画形状这个虚函数,2个子类分别是画矩形和三角形,重写了画形状,调用父类画形状时就分别画出了矩形和三角。


        IP属地:上海来自iPhone客户端6楼2022-03-27 12:52
        收起回复
          送一个词:省事


          IP属地:甘肃来自Android客户端8楼2022-03-27 13:13
          回复
            super是可以调用父类方法,但是此时父类方法完全执行,如果是想变更方法内部的代码呢,改变逻辑呢?就不行了,方法名相同不会混淆,你是疑惑调用方法时实际执行的父类还是子类方法吧,这个就看调用方法的对象了,根据你new出来的对象确定,父类对象就父类方法,子类就子类方法


            IP属地:浙江来自Android客户端9楼2022-03-27 13:15
            收起回复
              就拿list接口来说jdk中大部分用的是接口,但与继承有一定的相似。你一个方法需要传入list,但我不知道你用的Arraylist还是linkedlist,但两种都能符合我的要求去操作,按你这么说Arraylist与linkedlist不去实现list接口,用自己写的新方法的话,那我就得写两个方法,一个传Arraylist另一个linkedlist。


              IP属地:四川来自Android客户端11楼2022-03-27 13:49
              收起回复
                因为是面向接口编程,引用都是父类或者接口。高层完全不关心底层的具体实现,如果一个父类扩展了很多子类,对于同样的功能底层定制化重写父类方法,那么调用不同子类的同样功能用的都是一个方法名,你每个子类写不同方法名调用就很麻烦,而且多态就用处不大了。


                IP属地:上海来自Android客户端12楼2022-03-27 14:12
                收起回复
                  举个例子,Person里有个readbook方法,子类Student里有个study方法调了super.readbook。看起来是没问题的对吧。
                  Person p=new Student() 你给我调一个study方法给我看看哈


                  IP属地:辽宁来自Android客户端13楼2022-03-27 14:19
                  回复
                    面向对象的多态,需要学习一个


                    IP属地:四川来自Android客户端14楼2022-03-27 15:26
                    回复
                      学到多态了没有?


                      IP属地:广东来自Android客户端16楼2022-03-27 17:37
                      收起回复
                        子类调用父类方法,然后在这个基础上再修改?咱还真不知道怎么在调用父类方法的过程中修改方法,能不能你给我讲解一下?方法重写不就是修改父类方法吗?子类重写父类方法,都是为了更具体的实现,java是多继承,一个父类可以有很多子类,要是这些方法名随便起,怎么一眼看出来它是谁的子类继承了哪个方法?难道都一个个点进去看继承了xx的xx方法?要是没有开发工具点不进去呢?一个个看代码?


                        IP属地:江西来自Android客户端17楼2022-03-27 21:48
                        收起回复
                          java的重写
                          本质上是为了定义接口
                          而接口,本质上就是一套规范
                          现在我需要一个直径3cm的螺丝
                          你可以铅工把它撮出来
                          你可以数控机床给它加工出来
                          你甚至可以3D打印做出来
                          怎么实现我不管,只要你满足我定义的这个“直径3cm”的规范
                          我就能用它去拧在一个3cm的螺母上
                          这里,钳工、机床、3D打印都重写了“直径3cm”这个父类方法,拧在螺母里,就是调用这个公共的方法
                          在拧上去的时候,你根本不用管它是怎么实现的,因为满足了要求的规范


                          IP属地:上海来自Android客户端18楼2022-03-28 00:44
                          回复
                            java的重写
                            本质上是为了定义接口
                            而接口,本质上就是一套规范
                            现在我需要一个直径3cm的螺丝
                            你可以铅工把它撮出来
                            你可以数控机床给它加工出来
                            你甚至可以3D打印做出来
                            怎么实现我不管,只要你满足我定义的这个“直径3cm”的规范
                            我就能用它去拧在一个3cm的螺母上
                            这里,钳工、机床、3D打印都重写了“直径3cm”这个父类方法,拧在螺母里,就是调用这个公共的方法,拧上去的动作就是方法名
                            在拧上去的时候,甚至你可以交给一个盲人去拧,这个盲人根本不知道手里的螺丝是哪一种,但是他可以通过一个相同的拧螺丝姿势把螺丝拧好,因为三种螺丝都满足了要求的规范


                            IP属地:上海来自Android客户端19楼2022-03-28 00:50
                            回复