现在的位置: 首页 > 综合 > 正文

别样JAVA学习(五)继承上(0.3)多态

2018年11月03日 ⁄ 综合 ⁄ 共 995字 ⁄ 字号 评论关闭

多态

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,多态的应用

我们对类型进行抽取,导致了多态的产生操作同一个大类型,

对大类型中的所有小类型都能进行操作。

/*
基础班学生:
        学习,睡觉
高级班学生:
        学习,睡觉
*/     
可以将这两类事物进行抽取。

抱歉!评论已关闭.