旗下导航:搜·么
当前位置:网站首页 > JAVA教程 > 正文

java面向对象——多态的细致引见【JAVA教程】,java,面向对象,多态

作者:搜教程发布时间:2019-12-02分类:JAVA教程浏览:69评论:0


导读:一、概述多态是继封装、继续以后,面向对象的第三大特征。生活中,比方跑的行动,小猫、小狗和大象,跑起来是不一样的。再比方飞的行动,昆虫、鸟类和飞机,飞起来也是不一样的。可...

一、概述

多态是继封装、继续以后,面向对象的第三大特征。

生活中,比方跑的行动,小猫、小狗和大象,跑起来是不一样的。再比方飞的行动,昆虫、鸟类和飞机,飞起来也是不一样的。可见,统一行动,经由历程差别的事物,能够表现出来的差别的形状。多态,形貌的就是如许的状况。

多态:

是指统一行动,具有多个差别表现情势。

条件【重点】

1.继续或许完成【二选一】

2.要领的重写【意义表现:不重写,无意义】

3.父类援用指向子类对象【花样表现】

免费在线进修视频引荐:java视频

二、多态的表现

多态表现的花样:

父类范例 变量名 = new 子类对象; 
变量名.要领名();

父类范例:指子类对象继续的父类范例,或许完成的父接口范例。

代码以下:

Fu f = new Zi(); 
f.method();

当运用多态体式格局挪用要领时,起首搜检父类中是不是有该要领,假如没有,则编译毛病;假如有,实行的是子类重写后要领。

代码以下:

定义父类:

定义子类:

定义测试类:

三、多态的优点

现实开发的历程当中,父类范例作为要领情势参数,通报子类对象给要领,举行要领的挪用,更能表现出多态的扩大性与方便。

代码以下:

定义父类:

定义子类:

定义测试类:

public class Test {
    public static void main(String[] args) {
        // 多态情势,建立对象
        // Cat c = new Cat();
        // Dog d = new Dog();

        // 挪用showCatEat showCatEat(c);
        // 挪用showDogEat
        showDogEat(d);

        /*
        以上两个要领, 均能够被showAnimalEat(Animal a)要领所替换而实行结果一致
        */
        showAnimalEat(c);
        showAnimalEat(d);
    }

    public static void showCatEat(Cat c) {
        c.eat();
    }

    public static void showDogEat(Dog d) {
        d.eat();
    }

    public static void showAnimalEat(Animal a) {
        a.eat();
    }
}

当eat要领实行时,多态划定实行的是子类重写的要领,那末结果天然与showCatEat、showDogEat要领一致, 所以showAnimalEat完全能够替换以上两要领。

不仅仅是替换,在扩大性方面,不管以后再多的子类涌现,我们都不须要编写showXxxEat要领了,直接运用showAnimalEat都能够完成。

所以,多态的优点表现在能够使顺序编写的更简朴,并有优越的扩大。

四、援用范例转换

多态的转型分为向上转型与向下转型两种:

向上转型

向上转型:多态自身是子类范例向父类范例向上转换的历程,这个历程是默许的。

当父类援用指向一个子类对象时,就是向上转型。

运用花样:

父类范例 变量名 = new 子类范例(); 
如:Animal a = new Cat();

向下转型

父类范例向子类范例向下转换的历程,这个历程是强迫的。

一个已向上转型的子类对象,将父类援用转为子类援用,能够运用强迫范例转换的花样,就是向下转型。

运用花样:

子类范例 变量名 = (子类范例) 父类变量名; 
如 :Cat c =(Cat) a;

转型演示,代码以下:

定义类:

定义测试类:

转型的非常

转型的历程当中,一不小心就会碰到如许的问题,请看以下代码:

这段代码能够经由历程编译,然则运行时,却报出了ClassCastException,范例转换非常!这是由于,明显建立了Cat范例对象,运行时,固然不能转换成Dog对象的。这两个范例并没有任何继续关联,不符合范例转换的定义。

为了防止ClassCastException的发作,Java供应了 关键字,给援用变量做范例的校验。

花样以下:

变量名 instanceof 数据范例
假如变量属于该数据范例,返回true。
假如变量不属于该数据范例,返回false。

所以,转换前,我们最好先做一个推断,代码以下:

想进修更多相干教程请接见:java入门进修

以上就是java面向对象——多态的细致引见的细致内容,更多请关注ki4网别的相干文章!

标签:java面向对象多态


欢迎 发表评论: