[关闭]
@wangyupu 2020-06-11T13:58:08.000000Z 字数 1464 阅读 46

JAVA基础面向对象第四章方法重写与多态

JAVA面向对象


本章我们主要学习方法重写与多态

  1. 实现方法重写
  2. 深入理解继承相关概念
  3. 了解Object
  4. 会使用重写实现多态机制
  5. 会使用instanceof运算符
  6. 会使用向上转型
  7. 会使用向下转型
  8. 调用父类的print()方法,不能显示Dogstrain信息和Peguinsex信息
  9. 子类重写父类方法

方法的重写或方法的覆盖(overriding)

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

方法重写规则

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

方法重写vs方法重载

比较项 位置 方法名 参数表 返回值 访问修饰符
方法重写 子类 子类 相同 相同或是其子类 不能比父类更严格
方法重载 同类 相同 不相同 无关 无关

Object类

  1. Object类被子类经常重写的方法
  2. Object类是所有类的父类
方法 说明
toString() 返回当前对象本身的有关信息,按字符串对象返回
equals() 比较两个对象是否是同一个对象,是则返回true
hashCode() 返回该对象的哈希代码值
getClass() 获取当前对象所属的类信息,返回Class对象
  1. Object类的equals()方法
  2. 比较两个对象是否是同一个对象,是则返回true
  3. 操作符==
  4. 简单数据类型,直接比较值。如1==2
  5. 引用类型,比较两者是否为同一对象
  6. (1) Object类的equals()方法与==没区别
  7. (2)当有特殊需求,如认为属性相同即为同一对象时,需要重写equals()
  8. (3) Java.lang.String重写了equals()方法,把equals()方法的判断变为 了判断其值

instanceof用于判断一个引用类型所引用的对象是否是一个类的实例

为什么使用多态

  1. 频繁修改代码,代码可扩展性、可维护性差
  2. 使用多态优化

那么多态是啥??

  1. 同一种事物,由于条件不同,产生的结果也不同
  2. 多态:同一个引用类型,使用不同的实例而执行不同操作
  3. 方法重写是实现多态的基础

Pet类的toHospital()如何实现呢?

  1. toHospital()不需要有具体的实现
  2. 抽象方法
  3. Pet类声明为抽象类
  4. 实例化Pet毫无意义
  5. 抽象方法
  6. 抽象方法没有方法体
  7. 抽象方法必须在抽象类里
  8. 抽象方法必须在子类中被实现,
  9. 除非子类是抽象类

向上转型

  1. 向上转型:父类的引用指向子类对象,自动进行类型转换
  2. <父类型> <引用变量名> = new <子类型>();
  3. 此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法
  4. 此时通过父类引用变量无法调用子类特有的方法

向下转型

  1. 向下转型:将一个指向子类对象的父类引用赋给一个子类的引用,即:父类类型转换为子类类型。需强制类型转换
  2. <子类型> <引用变量名> = (<子类型> )<父类型的引用变量>;
  3. 在向下转型的过程中,如果没有转换为真实子类类型,会出现类型转换异常

instanceof(减小子转父的转型异常)

  1. Java中提供了instanceof运算符来进行类型的判断
  2. 使用instanceof时,对象的类型必须和instanceof后面的参数所指定的类在继承上有上下级关系
  3. 使用父类作为方法的形参,是Java中实现和使用多态的主要方式
  4. 使用父类作为方法的返回值,也是Java中实现和使用多态的主要方式
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注