一篇文章打好重写的基础

方法重写

·如何输出子类的特定属性?
方法一:不让父类提取方法,在各子类中单独定义
弊端:类似功能,在子类中大量重复代码
方法二:在父类中提供共性方法,子类再单独定义不同方法
弊端:对于用户而言,相同功能的实现是否可以通过调用相同方法名的方法统一实现
方案三:子类重写父类方法(overriding)
关于重写:

  1. 子类根据需求时对从父类继承的方法进行重新编写
  2. 重写时,可以用supper.方法的方式来保留父类的方法
  3. 构造方法不能被重写
    试验后,能够达到想要的效果
    总结:
    1.两个类:有继承关系的父子类
    2.同名方法(但是否必须返回值、访问修饰符都一样吗?)

关于supper

1.使用supper关键字,supper代表父类对象
2.super只能在子类的方法和构造方法中
3.super调用构造方法时,只能是第一句
4.supper不能访问父类的private成员

supper的使用场景
子类重写父类方法
在子类中定义了和父类同名的成员变量

this与supper的区别
1.访问属性上:this访问本类属性,如果没有则从父类找;而supper则访问父类中的属性
2.访问方法上:this访问本类方法,如果没有则从父类找;而supper则访问父类中的方法
3.访问构造上:this调用本类构造,放在构造方法首行;supper调用父类构造,放在子类构造方法首行

继承下的构造方法

调用规则

  1. 子类构造方法没有通过supper显示调用父类的有参构造方法,也没有通过this显示调用自身其他构造方法,则系统默认调用父类的无参构造方法
  2. 子类构造方法通过supper显示调用父类的有参构造方法则执行父类相应构造方法,而不执行父类无参构造方法
  3. 子类构造方法通过this显示调用自身的其他构造方法,在相应构造方法中应用以上两条规则

深入方法重写

方法名相同,参数列表相同,返回值类型相同或者是其子类,访问权限不能严于父类
父类的静态方法不能被子类覆盖为非静态方法,以便在子类中隐藏父类的静态方法(静态方法无法使用supper,通过类名调用),父类的私有方法不能被子类覆盖,不能抛出比父类方法更多的异常
以上为方法重写的特点

关于Object类

Object类是所有类的直接或间接父类
子类可以调用Objiect的方法如下:

  1. toString()返回当前对象本身的有关信息,按字符串对象返回
  2. equals()比较两个对象是否是同一个对象,是则返回true
  3. hashCode()返回该对象的哈希代码值
  4. getClass()获取当前对象所属的类信息,返回class对象

猜你喜欢

转载自blog.csdn.net/weixin_42507474/article/details/107187827