------- <ahref="http://www.itheima.com" target="blank">android培训</a>、<ahref="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
1. 多态:可以理解为事物存在的多种体现形态;
2. 多态的基本体现
父类的引用指向了自己的子类对象。父类的引用也可以接收自己的子类对象。
3. 多态的好处:
多态的出现大大提高程序的扩展性
4. 多态的前提
必须是类与类之间有关系,要么继承,要么实现。
通常还有一个前提:存在覆盖。
5. 多态弊端:
提高扩展性,但是只能使用父类的引用访问父类中的成员。
例子:
abstract class Animal
{
Publicabstract void eat();
}
class Cat extends Animal
{
Publicvoid eat()
{
System.out.println(“吃鱼”);
}
Public void catchMouse()
{
System.out.println(“抓老鼠”);
}
}
class Dog extends Animal
{
Publicvoid eat()
{
System.out.println(“吃骨头”);
}
Public void kanJia()
{
System.out.println(“看家”);
}
}
class Pig extends Animal
{
Publicvoid eat()
{
System.out.println(“食料”);
}
Public void gongDi()
{
System.out.println(“拱地”);
}
}
class DuoTaiDemo
{
Public staticvoid main (String [] args)
{
Animal a = new Cat();//l类型提升,向上转型
a.eat();
Cat c = (Cat)a;//强制将父类的引用,转成子类类型,向下转型。
c.catchMouse();
/*
千万不要出现这样的操作,就是将父类对象转成子类类型。
我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转化
Animal a= new Animal();
Cat c =(Cat)a;//这是错的,不能将父类转成子类类型
*/
//System.out.println();
function (new Cat());
funntion (new Dog());
funntion (new Pig());
}
Public staticvoid function(Animal a)
{
a.eat();
if(ainstanceof Cat)//instancef 是判断某一类型是否符合某一类型,即Animal 符合//Cat
{
Cat c = (Cat)a;
c.catchMouse();
}
Else if (ainstanceof Dog)
{
Dog c = (Dog)a;
c.kanJia();
}
}
}
6. 多态自始至终都是子类对象在做变化。
7. if(a instanceof Cat)//instancef 是判断某一类型引用是否符合某一类型,即Animal 符合//Cat
8.在多态中成员函数的特点:(非静态
在编译时期:参阅引用型变量所属的类中是否有调用的方法,如果有,编译通过,如果
有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结:成员函数在多态调用时,编译看左边,运行看右边。
9.在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
10.在多态中:静态成员函数的特点:
无论编译和运行,都参考左边。
11 学习心得和体会:
千万不要出现这样的操作,就是将父类对象转成子类类型。
我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转化
------- <ahref="http://www.itheima.com" target="blank">android培训</a>、<ahref="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------