长春人文学院第四组孙乃宇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
-
方法的重写:
-
重写方法的返回值可以是被重写方法的返回值的子类
-
个人理解多态,要想实现多态,需要有子父类继承关系,子类中要重写父类的方法,创建对象时是父类指向子类。
-
创建对象的时候,父类指向子类,当对象调用子类中重写的方法时,会调用子类的方法,并只会调用子类中重写的方法,子类中其他的属性和不是重写的方法不会调用到的,父类中的没有被重写的方法和属性可以被调用到的。
-
多态中对象可以使用的只有子类重写过的方法。调用其他的都是父类中的东西。
考试错题
-
对于构造函数,下列叙述不正确的是(A)(选择一项) [单选题]
A 子类不被允许调用父类的构造方法
B 构造方法允许重载
C 子类默认调用父类的无参构造方法
D 在同一个类中定义的重载构造方法可以相互调用
反思:我这道题选择的是C原因是没仔细审题,看错题目。
-
方法重写中,子类方法的修饰符范围的要求是大于等于父类的修饰符范围
错误原因:没有理解继承中父类与子类之间方法重写的访问修饰符之间的联系
学习收获
今日学习了多态,多态的目的就是一个对象可以调用不同类中的方法。 instanceof关键字,可以判断对象是否是某一个类的实例。还有匿名对象,多数配合构造器使用。
-
向上转型:父类对象指向子类引用
-
向下转型:子类引用指向父类对象,前提:必须发生向上转型
-

浙公网安备 33010602011771号