0x00:多态描述

同一个对象,在不同时刻表现出来的不同形态。
举例: 猫
我们可以说猫是猫: 猫 cat = new 猫 ();
我们可以说猫是动物: 动物 animal = new 猫 ();
这里猫在不同的时刻表现出来了不同的形态,这就是多态。

多台的前提和体现

  • 有继承和实现关系
  • 有方法重写
  • 有父类引用指向子类对象

范例: 猫
image.png

0x02:多态中成员访问特点

  • 成员变量: 编译看左边,执行看左边
  • 成员方法:编译看左边,执行看右边

为什么成员变量和成员方法不一样?
因为成员方法有重写,而成员变量没有

多态的好处: 提高了程序的扩展性,定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类来进行操作
多态的弊端: 不能使用子类的特有功能

举例:
animal 父类

  1. package com;
  2. public class animal {
  3. public int age = 18;
  4. public void eat(){
  5. System.out.println("动物吃食物");
  6. }
  7. }

cat 类

  1. package com;
  2. public class cat extends animal{
  3. public int age = 18;
  4. public int weight = 10;
  5. @Override
  6. public void eat() {
  7. System.out.println("猫吃鱼");
  8. }
  9. public void game() {
  10. System.out.println("猫玩游戏");
  11. }
  12. }

dog类

  1. package com;
  2. public class cat extends animal{
  3. public int age = 18;
  4. public int weight = 10;
  5. @Override
  6. public void eat() {
  7. System.out.println("猫吃鱼");
  8. }
  9. public void game() {
  10. System.out.println("猫玩游戏");
  11. }
  12. }

opetaor类

  1. package com;
  2. public class poeator {
  3. public void useanimal(animal a){ //使用animal a 作为参数
  4. a.eat();
  5. }
  6. }

demo测试

  1. package com;
  2. public class Demo {
  3. public static void main(String[] args) {
  4. poeator ao = new poeator();
  5. cat c = new cat();
  6. ao.useanimal(c); cat 对象传入到useanimal 使用 animal a = new cat
  7. dog d = new dog();
  8. ao.useanimal(d);
  9. }
  10. }

0x03:多态中的转型

向上转型:从子到父,父类引用指向子类对象
向下转型:从父到子 父类引用转为子类对象, 可以访问子类中的特有方法
image.png