欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)例講解多態(tài)數(shù)組的使用

 更新時(shí)間:2022年05月19日 09:17:47   作者:Demo龍  
本文章向大家介紹Java多態(tài)數(shù)組,主要包括Java多態(tài)數(shù)組使用實(shí)例、基本知識(shí)點(diǎn)總結(jié)和需要注意事項(xiàng),具有一定的參考價(jià)值,需要的朋友可以參考一下

多態(tài)概述

多態(tài)概念:所謂多態(tài)就是指程序中定義的引用變量所指向的具體類型和通過(guò)該引用變量發(fā)出的方法調(diào)用在編程時(shí)并不確定,而是在程序運(yùn)行期間才確定,即一個(gè)引用變量到底會(huì)指向哪個(gè)類的實(shí)例對(duì)象,該引用變量發(fā)出的方法調(diào)用到底是哪個(gè)類中實(shí)現(xiàn)的方法,必須在由程序運(yùn)行期間才能決定。因?yàn)樵诔绦蜻\(yùn)行時(shí)才確定具體的類,這樣,不用修改源程序代碼,就可以讓引用變量綁定到各種不同的類實(shí)現(xiàn)上,從而導(dǎo)致該引用變量調(diào)用的具體方法隨之改變,即不修改程序代碼就可以改變程序運(yùn)行時(shí)所綁定的具體代碼,讓程序可以選擇多個(gè)運(yùn)行狀態(tài),這就是多態(tài)性。

多態(tài)存在的三個(gè)必要條件

1.要有繼承關(guān)系的存在(實(shí)現(xiàn)接口也是一種繼承關(guān)系)

2.要有方法的重寫

3.要有父類引用指向子類對(duì)象

注:

1. 運(yùn)行方法看運(yùn)行類型,屬性看編譯類型

2.在方法中調(diào)用屬性,無(wú)特殊情況為本類屬性

3.若類型中沒(méi)有調(diào)用的方法,遵循向上查詢

1.向上轉(zhuǎn)型

1.對(duì)象的向上轉(zhuǎn)型,其實(shí)就是多態(tài)寫法:

  格式: 父類名稱 對(duì)象名 = new  子類名稱();

  含義:右側(cè)創(chuàng)建了一個(gè)子類對(duì)象,把它當(dāng)作父類來(lái)看待使用。

Person person=new student();

          創(chuàng)建了一個(gè)學(xué)生對(duì)象,當(dāng)作人看待,沒(méi)有問(wèn)題。
          此時(shí)的編譯類型為person,運(yùn)行類型為學(xué)生;

注意事項(xiàng):向上轉(zhuǎn)型一定是安全的。從小范圍轉(zhuǎn)向了大范圍,從小范圍的貓,向上轉(zhuǎn)換成為更大范圍的動(dòng)物

2.向下轉(zhuǎn)型

2.對(duì)象的向下轉(zhuǎn)型,其實(shí)就是一個(gè)還原的動(dòng)作:

   格式: 子類名稱 對(duì)象名 =(子類名稱) 父類對(duì)象;

   含義:將子類還原,還原成為本來(lái)的子類對(duì)象

Cat cat =(Cat) animal;//本來(lái)是貓,向上轉(zhuǎn)型成為動(dòng)物,還原回來(lái)成為本來(lái)的貓 注意事項(xiàng):

   a.必須保證對(duì)象本來(lái)創(chuàng)建的時(shí)候就是貓,才能向下轉(zhuǎn)型成為貓

   b.如果對(duì)象創(chuàng)建的時(shí)候不是貓,現(xiàn)在非要向下轉(zhuǎn)型成為貓,就會(huì)報(bào)錯(cuò)

多態(tài)數(shù)組

建立一個(gè)polyArr包

Arrtest.java

package com.polyArr;
public class Arrtest {
    public static void main(String[] args) {
        //父類的引用可以指向子類的對(duì)象
        Person []p=new Person[5];
        p[0]=new Person("aaa",15);
        p[1]=new Student("asas",16, 55);
        p[2]=new Student("ccc",17, 66);
        p[3]=new Teacher("nnn",18, 2000);
        p[4]=new Teacher("mmm",19, 6666);
        for(int i=0;i< p.length;i++)
        {
            //動(dòng)態(tài)綁定機(jī)制
            //person[i]編譯類型是Person,運(yùn)行類型是根據(jù)實(shí)際情況判斷的
            System.out.println(p[i].say());
        }
    }
}

Person.java

package com.polyArr;
public class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String say(){
        return "name="+name+" age="+age;
    }
}

Student.java

package com.polyArr;
public class Student extends Person{
    private double score;

    public Student(String name, int age, double score) {
        super(name, age);
        this.score = score;
    }
    public double getScore() {
        return score;
    }
    public void setScore(double score) {
        this.score = score;
    }
    public String say(){
        return super.say()+" score="+score;
    }
}

Teacher.java

package com.polyArr;
public class Teacher extends Person {
    private int salary;
    public Teacher(String name, int age, int salary) {
        super(name, age);
        this.salary = salary;
    }
    public int getSalary() {
        return salary;
    }
    public void setSalary(int salary) {
        this.salary = salary;
    }
    public String say(){
        return super.say()+" salary="+salary;
    }
}

運(yùn)行結(jié)果

多態(tài)數(shù)組+向下轉(zhuǎn)型

instanceof關(guān)鍵字

運(yùn)算符是用來(lái)在運(yùn)行時(shí)指出對(duì)象是否是特定類的一個(gè)實(shí)例。instanceof通過(guò)返回一個(gè)布爾值來(lái)指出,這個(gè)對(duì)象是否是這個(gè)特定類或者是它的子類的一個(gè)實(shí)例。

用法: result = object instanceof class

result為boolean類型

參數(shù):

Result:布爾類型。

Object:必選項(xiàng)。任意對(duì)象表達(dá)式。

Class:必選項(xiàng)。任意已定義的對(duì)象類。

說(shuō)明:

如果 object 是 class 的一個(gè)實(shí)例,則 instanceof 運(yùn)算符返回 true。如果 object

不是指定類的一個(gè)實(shí)例,或者 object 是 null,則返回 false。

但是instanceof在Java的編譯狀態(tài)和運(yùn)行狀態(tài)是有區(qū)別的;

注:

在編譯狀態(tài)中,class可以是object對(duì)象的父類,自身類,子類。在這三種情況下Java編譯時(shí)不會(huì)報(bào)錯(cuò)。

在運(yùn)行轉(zhuǎn)態(tài)中,class可以是object對(duì)象的父類,自身類,不能是子類。在前兩種情況下result的結(jié)果為true,最后一種為false。但是class為子類時(shí)編譯不會(huì)報(bào)錯(cuò)。運(yùn)行結(jié)果為false。

建立一個(gè)polyArr包

Arrtest.java

package com.polyArr;
public class Arrtest {
    public static void main(String[] args) {
        //父類的引用可以指向子類的對(duì)象
        Person []p=new Person[5];
        p[0]=new Person("aaa",15);
        p[1]=new Student("asas",16, 55);
        p[2]=new Student("ccc",17, 66);
        p[3]=new Teacher("nnn",18, 2000);
        p[4]=new Teacher("mmm",19, 6666);
        for(int i=0;i< p.length;i++)
        {
            //動(dòng)態(tài)綁定機(jī)制
            //person[i]編譯類型是Person,運(yùn)行類型是根據(jù)實(shí)際情況判斷的
            System.out.println(p[i].say());
            if(p[i] instanceof Student)
            {
                Student t1=(Student) p[i];
                System.out.println(t1.learn());
            }
            else if(p[i] instanceof Teacher)
            {
                Teacher t1=(Teacher) p[i];
                System.out.println(t1.teach());
            }
        }
    }
}

Person.java

package com.polyArr;
public class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String say(){
        return "name="+name+" age="+age;
    }
}

Student.java

package com.polyArr;
public class Student extends Person{
    private double score;
    public Student(String name, int age, double score) {
        super(name, age);
        this.score = score;
    }
    public double getScore() {
        return score;
    }
    public void setScore(double score) {
        this.score = score;
    }
    public String say(){
        return super.say()+" score="+score;
    }
	public String learn(){
        return getName()+"正在聽講";
    }
 }

Teacher.java

package com.polyArr;
public class Teacher extends Person {
    private int salary;
    public Teacher(String name, int age, int salary) {
        super(name, age);
        this.salary = salary;
    }
    public int getSalary() {
        return salary;
    }
    public void setSalary(int salary) {
        this.salary = salary;
    }
    public String say(){
        return super.say()+" salary="+salary;
    }
    public String teach(){
        return getName()+"正在上課";
    }
}

運(yùn)行結(jié)果

到此這篇關(guān)于Java實(shí)例講解多態(tài)數(shù)組的使用的文章就介紹到這了,更多相關(guān)Java多態(tài)數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JAVA實(shí)現(xiàn)線程的三種方法

    JAVA實(shí)現(xiàn)線程的三種方法

    這篇文章介紹了JAVA實(shí)現(xiàn)線程的三種方法,有需要的朋友可以參考一下
    2013-09-09
  • 基于mybatis高級(jí)映射多對(duì)多查詢的實(shí)現(xiàn)

    基于mybatis高級(jí)映射多對(duì)多查詢的實(shí)現(xiàn)

    下面小編就為大家?guī)?lái)一篇基于mybatis高級(jí)映射多對(duì)多查詢的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • SpringBoot 在項(xiàng)目啟動(dòng)之后執(zhí)行自定義方法的兩種方式小結(jié)

    SpringBoot 在項(xiàng)目啟動(dòng)之后執(zhí)行自定義方法的兩種方式小結(jié)

    這篇文章主要介紹了SpringBoot 在項(xiàng)目啟動(dòng)之后執(zhí)行自定義方法的兩種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 解決springboot與springcloud版本兼容問(wèn)題(附版本兼容表)

    解決springboot與springcloud版本兼容問(wèn)題(附版本兼容表)

    在基于spring boot搭建spring cloud時(shí),創(chuàng)建eureka后啟動(dòng)服務(wù)發(fā)生報(bào)錯(cuò),本文給大家介紹了解決springboot與springcloud版本兼容問(wèn)題的幾種方案,需要的朋友可以參考下
    2024-02-02
  • Spring注解方式無(wú)法掃描Service注解的解決

    Spring注解方式無(wú)法掃描Service注解的解決

    這篇文章主要介紹了Spring注解方式無(wú)法掃描Service注解的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringBoot打War包上傳到阿里云的LINUX服務(wù)器的操作方法

    SpringBoot打War包上傳到阿里云的LINUX服務(wù)器的操作方法

    這篇文章主要介紹了SpringBoot打War包上傳到阿里云的LINUX服務(wù)器,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • SpringCloud讓微服務(wù)實(shí)現(xiàn)指定程序調(diào)用

    SpringCloud讓微服務(wù)實(shí)現(xiàn)指定程序調(diào)用

    這篇文章主要介紹了SpringCloud讓微服務(wù)實(shí)現(xiàn)指定程序調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • MyBatis分頁(yè)插件PageHelper的具體使用

    MyBatis分頁(yè)插件PageHelper的具體使用

    這篇文章主要介紹了MyBatis分頁(yè)插件PageHelper的具體使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • SpringBoot異步實(shí)現(xiàn) 的8種方式

    SpringBoot異步實(shí)現(xiàn) 的8種方式

    在同步操作中,執(zhí)行到?發(fā)送短信?的時(shí)候,我們必須等待這個(gè)方法徹底執(zhí)行完才能執(zhí)行?贈(zèng)送積分?這個(gè)操作,如果?贈(zèng)送積分?這個(gè)動(dòng)作執(zhí)行時(shí)間較長(zhǎng),發(fā)送短信需要等待,這就是典型的同步場(chǎng)景,這篇文章主要介紹了SpringBoot異步實(shí)現(xiàn) 的8種方式,需要的朋友可以參考下
    2023-11-11
  • java之jvm加載器例舉

    java之jvm加載器例舉

    在本篇文章里小編給大家介紹了關(guān)于java之jvm加載器例舉內(nèi)容,對(duì)此有需要的程序員朋友們可以參考下。
    2021-03-03

最新評(píng)論