子类重写了父类的方法,父类和子类都用this调用父类中的同名方法,子类调用的是重写后的方法,那父类呢? 为什么还是重写后的方法?
这个是多态的表现形式之一,重点要看new 的是那个类,new父类就调用父类的方法,new子类就调用子类的方法。
父类对象调用的就是自己的方法。
这个要看你怎么使用父类和子类对象了。
Java中有向上和向下转型。
如果创建的是父类对象,调用父类的方法不会去调用子类的方法的。一定是你用子类创建类父类对象
这里的this关键字指的是当前对象,就是使用this的这个类,你2次this都指向子类,所以结果一样,如果要用父类,要使用super关键字,可以请采纳
面向对象的三大特性:封装,继承,多态。
重写方法就是多态的一种体现。
说太多抽象的你可能不理解,你还原到应用场景就好理解了:
-=-=-
比如我有一堆自定义控件,每一个的刷新方式都不一样。
那么我在窗体中拖出来一堆控件之后,想让它们同时刷新,该怎么写代码呢?
遍历窗体之后一个一个的去判断它们的类型,然后分支语句转成对应类型,再调用它们每个自己的刷新函数,是个办法,可是太繁琐了。
更好的办法是写个基类,里面写好刷新函数,可以是个虚函数。
每个控件继承之后,重写方法,用自己特殊的刷新方式去替代。
这样当你需要刷新的时候,直接将它们转成父类对象,然后执行父类的刷新函数,最终执行的其实是子类的函数。
这就是重写的意义所在。否则只是替换了个名字,而不能执行,那重新起个名字又有什么不同呢,为什么非要重写呢。