方法的重写与多态
方法的重写
方法重写也叫方法覆盖,是指子类根据需求对从父类继承的方法进行重新编写。通常父类的方法被子类继承后,在不同的子类中可能需要做不同的操作。方法只能在子类中进行重写。
重写时,可以用super.方法的方式来保留父类的方法。但构造方法不能被重写,因为子类不能从父类中继承父类构造方法,而是调用父类的构造方法。
方法重写的规则
方法重写的规则有以下几点:
1、方法名相同
2、参数类型相同
3、返回值类型相同或是其子类(不能是基本数据类型的自动转换)
4、访问权限不能严于父类(子类中方法的访问修饰符所限定的范围必须大于或等于父类的)
5、父类的静态方法不能被子类覆盖为非静态方法,父类的非静态方法不能被子类覆盖为静态方法
6、子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法(静态方法中无法使用super和this)
7、父类的私有方法不能被子类覆盖
8、不能抛出比父类方法更多的异常
方法重载与方法重写的区别
比较项 | 位置 | 方法名 | 参数列表 | 返回值 | 访问修饰符 |
---|---|---|---|---|---|
方法重写 | 子类 | 相同 | 相同 | 相同或是其子类 | 不能比父类更严格 |
方法重载 | 同类 | 相同 | 相同 | 无关 | 无关 |
方法重载是在同一个类中对一个方法进行重载,
而方法重写是在子类中对父类的方法进行重新编写。
Object类
在Java中,Object类是所有类的直接或间接父类。
Object类中被子类经常重写的方法
方法 | 说明 |
---|---|
toString() | 返回当前对象本身的有关信息,按字符串对象返回 |
equals() | 比较两个对象是否是同一个对象,是则返回true |
hashCode() | 返回该对象的哈希代码值 |
getClass() | 获取当前对象所属的类信息,返回Class对象 |
其中用的最多的是equals()方法
Object类中的equals()方法
比较两个对象是否是同一个对象,是则返回true。