多态的学习

多态:可以理解为事物具有多种形态,比如人:男人,女人。

多态的体现:父类的应用指向自己的子类对象,换句话说,就是子类对象的类型可以定义为父类,比如说,我建立了一个猫的对象,我把它定义为动物类型,这时可以的。

举个实例说明一下:

abstract class Animal
{
    abstract void eat();
    void sleep()
    {
        System.out.println("睡觉");
    }
}
class Cat extends Animal 
{
    public void eat()
    {
        System.out.println("吃老鼠");
    }
}
class Dog extends Animal
{
    public void eat()
    {
        System.out.println("吃骨头");
    }
}
class Demo
{
    public static void main(String[] args)
    {
        Animal c=new Cat();//很明显是猫的对象,但类型是动物类
        eat(c);//c虽然是猫的对象,但它的类型是Animal,所以可以作为实参
    }
    public static void eat(Animal a)
    {
        a.eat();
    }
}
上例很明显地看出多态的好处,试想一下,如果Demo类中eat函数想看所有动物吃什么,如果没有多态,那么有几个类就要写多少个函数,如果继承动物类的子类很多,那没有多态想实现该功能是不现实的,有了多态,在写需要调用子类对象的函数时就可以把参数类型定义为父类类型,初始化对象时也定义为父类类型。不过多态也有弊端,在使用多态时,只能调用子类与父类共有的方法,而不能调用子类特有的方法。

===========================================================================================================================

多态这种特殊的定义对象方法中存在着对象类型转换的过程,对象类型转换分为两种:向上转型和向下转型。多态中对象的初始化就是向上转型:Animal c=new Cat(),父类做类型,子类是对象,这是自动的,而向下转型类似于强制类型转换:Animal c=new Cat(); Cat a=(Cat)c,把原先为父类类型强制转换为子类。

===========================================================================================================================

在对象类型的转换过程中如果对象不属于被转换成的类型怎么办?(对象属于对象本身的类及其父类)这时应该加入一条判断语句instanceof:Animal c=new Cat(); if(c instanceof Cat){},格式就是:对象名 instanceof 类名;返回值是boolean型,属于就是true,不属于就是false。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值