-------
android培训、
java培训、期待与您交流! ----------
一.多态
定义:可以理解为实物的多种体现
1.多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接受自己的子类对象
2.多态的前提
必须是类与类之间有关系(要么继承,要么实现)。
通常还有一个前提,存在覆盖
3.多态的弊端
提高了扩展性,但只是使用父类的引用访问子类中的成员
多态实例代码
abstract class Animal
{
public abstract void eat();
}
class Cat extends Animal
{
public void eat()
{
sop("吃鱼")
}
public void catchMouse()
{
sop("zhuo");
}
}
class Dog extends Animal
{
public void eat()
{
sop("吃肉")
}
public void kenBone()
{
sop("骨头");
}
}
class DuoTaiDemo
{
public static void main(String[] args)
{
Animal c=new Cat();//父类的引用指向了自己的子类对象,父
//类的引用也可以接受自己的子类对象。
function(new Cat());
Cat a=(Cat)c;//把Animal强转回猫
}
public static void function(Animal c)
{
c.eat();//只是调用父类的功能
}
}
//
多态的转型
Animal c=new Cat();//父类的引用指向了自己的子类对象,父
//类的引用也可以接受自己的子类对象。
function(new Cat());
Cat a=(Cat)c;//把Animal强转回猫,向下转型
Animal a=new Animal();
Cat b=(Cat)a;这种方式有问题,不能将动物强转为猫。
多态自始至终都是子类在做着变化
///、、、、
instanceof的运用
class DuoTaiDemo
{
public static void main(String[] args)
{
Animal c=new Cat();//父类的引用指向了自己的子类对象,父
//类的引用也可以接受自己的子类对象。
function(new Cat());
Cat a=(Cat)c;//把Animal强转回猫
}
public static void function(Animal c)
{
c.eat();//只是调用父类的功能
if(c instanceof Cat)//if只要满足了一次 后面不去判断了
{
Cat a=(Cat)c;
a.catchMouse();
}
else if(c instanceof Dog)
{
Dog c=(Dog)c;
c.kenBone();
}
}
}
//
多态在在编译看左边,运行是看右边
二。toString方法
1.object有tostring方法,返回的是一个字符串
由类名(getName())+十六进制hashcode表示
一般子类都覆盖了此方法