多态

向上转型和向下转型 (前提是两种类型之间具有继承关系)

  1. 向上转型:将子类对象赋给父类引用
  2. 向下转型:将父类引用转换为子类类型(使用场景:在需要访问子类中特有的方法的时候,如下面的catMouse()方法)

多态的解释

class test{
  Animal a1 = new Cat();//向上转型
  a1.move();      // 可以通过
  a1.catchMouse();// 子类特有的方法,不能通过,编译阶段不通过。(a1到Animal中找catchMouse(),没找到,于是报错)。
}

class Animal{
  public void move(){};
}

class cat extends Animal{
  public void move(){};

  public void catchMouse(){};
}

calss Bird extends Animal{
}

java程序执行分为编译阶段和运行阶段

  • 编译阶段
    编译器在编译检查语法的时候,发现a1为Animal类型,在调用move()方法的时候会到Animal.class文件中找move()方法,找到了,绑定上move(),编译通过,静态绑定成功。

  • 运行阶段
    在运行阶段的时候,实际在堆内存中创建的是Cat对象,于是到会到Cat中找move()方法并执行,这个过程属于动态绑定。

这就是多态的表现形式:编译时一种状态,运行时一种状态。


向下转型:(类似于强制类型转换)

  Cat c = (Cat) a1;
  c.catMouse();

将Animal类型的a1转换为Cat类型,此时c就能抓老鼠了。

向下转型的风险:

  Animal a2 = new Bird();
  Cat c2 = (Cat) a2;
  /*
    编译通过,运行报错
    java.lang.ClassCastException  类型转换异常
  */
posted @ 2021-10-02 10:17  这个世界会好的  阅读(38)  评论(0编辑  收藏  举报