长春人文学院第四组孙乃宇https://www.cnblogs.com/sunnaiyu/多态

多态

面向对象特征之三:多态 *

  • 狗是动物么?是

  • 猫是动物么?是 *

  • 狗是猫么?不是 *

  • 多态的形成有三个条件

  • 1.有继承

  • 2.有重写

  • 3.父类对象指向子类引用 *

第一种多态形式(向上转型)自动转

  • 父类 父类对象=new 子类(); *

  • 第二种多态形式:(向下转型)

  • 子类 子类对象=new 父类();

  • 发生向下转型的前提,要先发生向上转型,才能通过强转成子类类型 * *

匿名对象

  • new 类名()

  • 功能:和正常的有名字的对象的功能是相同的

  • 依然具备了调用属性,方法的功能

  • 使用场景:多数是用在传参,实参,多数情况下配个构造器使用 *

  • 好处:节约资源,栈的资源

instanceof 关键字

编译看左边,运行看右边

public void feed(Animal animal){
       //判断animal是不是猫,内心真实身份是不是猫
       if(animal instanceof Cat){
           Cat cat= (Cat) animal;
           cat.catchMouse();
      }else if(animal instanceof Dog){
           Dog dog= (Dog) animal;
           dog.look();
      }else {
           System.out.println("我啥也不养");
      }
  }

 

链表:数据结构

  • 在内存中,数组和链表都是最基本的数据结构,表,或者线性表

  • 线性表:线性的结构,他是一个含有你>=0个节点的有限序列

  • 有且只有一个上一个节点,有且只有一个下一个节点

  • 说人话,有头有尾的一条线

  • 单向链表:在维护一个结点的自身的值的同时,还要维护他的下一个值的指向

  • 双向链表:在维护一个节点的自身的值的同时,还要维护他的上一个和下一个值的指向 

总结:

  • 多态:

  • 向上转型:父类对象指向子类引用

  • 向下转型:子类引用指向父类对象,前提:必须发生向上转型

  • instanceOf:判断某一个对象是不是这个类的实例,返回boolean 

  • 方法的重写:

  • 重写方法的返回值可以是被重写方法的返回值的子类

  • 个人理解多态,要想实现多态,需要有子父类继承关系,子类中要重写父类的方法,创建对象时是父类指向子类。

  • 创建对象的时候,父类指向子类,当对象调用子类中重写的方法时,会调用子类的方法,并只会调用子类中重写的方法,子类中其他的属性和不是重写的方法不会调用到的,父类中的没有被重写的方法和属性可以被调用到的。

  • 多态中对象可以使用的只有子类重写过的方法。调用其他的都是父类中的东西。

考试错题

 

  1. 对于构造函数,下列叙述不正确的是(A)(选择一项) [单选题]

A 子类不被允许调用父类的构造方法

B 构造方法允许重载

C 子类默认调用父类的无参构造方法

D 在同一个类中定义的重载构造方法可以相互调用

反思:我这道题选择的是C原因是没仔细审题,看错题目。

  1. 方法重写中,子类方法的修饰符范围的要求是大于等于父类的修饰符范围

    错误原因:没有理解继承中父类与子类之间方法重写的访问修饰符之间的联系

学习收获

今日学习了多态,多态的目的就是一个对象可以调用不同类中的方法。 instanceof关键字,可以判断对象是否是某一个类的实例。还有匿名对象,多数配合构造器使用。

  • 向上转型:父类对象指向子类引用

  • 向下转型:子类引用指向父类对象,前提:必须发生向上转型

  •  
posted @ 2022-07-25 19:58  孙乃宇  阅读(37)  评论(0)    收藏  举报