方法的重写与多态

2023-05-04 19:33:40 浏览数 (1)

方法的重写与多态

什么是方法的重写

  1. 子类根据需求对从父类继承的方法进行重新编写
  2. 重写时,可以用super.方法的方式来保留父类的方法
  3. 构造方法不能被重写

重写规则

  1. 方法名相同
  2. 参数列表相同
  3. 返回值类型相同或者是其子类
  4. 访问权限不能严于父类
  5. 父类的静态方法不能被子类覆盖为非静态方法,父类的非静态方法不能被子类覆盖为静态方法 子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法(注:静态方法中无法使用super)
  6. 父类的私有方法不能被子类覆盖
  7. 不能抛出比父类方法更多的异常

重写与重载的比较

比较项

位置

方法名

参数表

返回值

访问修饰符

方法重写

子类

相同

相同

相同或是其子类

不能比父类更严格

方法重载

同类

相同

不相同

无关

无关

Object类

Object类是所有类的父类

经常被重写的方法

方法

说明

toString()

返回当前对象本身的有关信息,按字符串对象返回

equals()

比较两个对象是否是同一个对象,是则返回true

hashCode()

返回该对象的哈希代码值

getClass()

获取当前对象所属的类信息,返回Class对象

equals()方法
  • 比较两个对象是否是同一个对象,是则返回true
  • 操作符== 简单数据类型,直接比较值。如1==2 引用类型,比较两者是否为同一对象
注意

(1)Object类的equals()方法与==没区别 (2)当有特殊需求,如认为属性相同即为同一对象时,需要重写equals() (3)Java.lang.String重写了equals()方法,把equals()方法的判断变为了判断其值

什么是多态

一个实例不同的展现形式

实现多态的基础

方法重写

抽象方法

  • 抽象方法没有方法体
  • 抽象方法必须在抽象类里
  • 抽象方法必须在子类中被实现,除非子类是抽象类

向上转型

父类的引用指向子类对象,自动进行类型转换

语法
代码语言:javascript复制
  <父类型> <引用变量名> = new <子类型>();
注意

此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法 此时通过父类引用变量无法调用子类特有的方法

向下转型

将一个指向子类对象的父类引用赋给一个子类的引用,即:父类类型转换为子类类型。需强制类型转换

语法
代码语言:javascript复制
<子类型> <引用变量名> = (<子类型> )<父类型的引用变量>;

在向下转型的过程中,如果没有转换为真实子类类型,会出现类型转换异常

instanceof

使用instanceof时,对象的类型必须和instanceof后面的参数所指定的类在继承上有上下级关系

Java中实现和使用多态的主要方式

使用父类作为方法的形参或者返回值

0 人点赞