多态
1、定义:
可以理解为事物存在的多种体现形态。
人:男人,女人
动物:猫,狗。
猫x=new 猫();
动物x=new猫();
多态我们强调的是多种形态的体现。
同一个函数名称体现形态不一样。
2、对象的多态性
1,多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接受自己的子类对象。
2,多态的前提
必须是类与类之间有关系。要么继承,要么实现。
通常还有一个前提:存在覆盖。
3,多态的好处与弊端
多态的出现大大的提高程序的扩展性,
但只能使用父类的引用访问父类中的成员。
4,多态的应用
动物,猫,狗。
3、转型:
类型提升引用到了动物类型当中。将子类转换成父类,向上转型。
如果想要调用猫的特有方法时,如何操作?
强制将父类的引用,转成子类类型。向下转型。
Cat c=(Cat)a;
c.catchMouse();
不可以这样
Animal a=new Animal();
Cat c=(Cat)a;
上面这个例子将动物强制转换成猫,千万不可将父类转成子类类型。
我们能转换的是父类应用指向了自己的子类对象时,该应用可以
被提升,也可以被强制转换。
多态自始自终都是子类对象在做着变化。
毕姥爷 x=new 毕老师();
x.讲课();
毕老师 y=(毕老师)x;
y.看电影();
public static void main(String[] args) { Animal a=new Dog(); fun(a); //a.eat(); //想要调用猫的特有方法时,如何操作? //强制将父类的引用。转换成子类类型。向下转型。 //Cat c=(Cat)a; //c.catchMouse(); //千万不要出现这样的操作,就是将父类对象转成子类类型。 //我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升 } public static void fun(Animal a) { a.eat(); if(a instanceof Cat)//判断传进来的是不是Cat类型 { Cat c=(Cat)a; c.catchMouse(); } else if(a instanceof Dog) { Dog d=(Dog)a; d.kanjia(); } }
4,多态的应用
我们对类型进行抽取,导致了多态的产生操作同一个大类型,
对大类型中的所有小类型都能进行操作。
/*
基础班学生:
学习,睡觉
高级班学生:
学习,睡觉
*/
可以将这两类事物进行抽取。