最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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.要有方法的重寫(xiě)

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)寫(xiě)法:

  格式: 父類名稱 對(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()+"正在聽(tīng)講";
    }
 }

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)文章

  • ServletContext讀取web資源_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    ServletContext讀取web資源_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了ServletContext讀取web資源,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • MySQL中關(guān)鍵字UNION和UNION ALL的區(qū)別

    MySQL中關(guān)鍵字UNION和UNION ALL的區(qū)別

    本文主要介紹了MySQL中關(guān)鍵字UNION和UNION ALL的區(qū)別,深入探討UNION和UNION ALL的定義、用法、主要區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • SpringCloud微服務(wù)中跨域配置的方法詳解

    SpringCloud微服務(wù)中跨域配置的方法詳解

    在使用SpringCloud實(shí)現(xiàn)微服務(wù)時(shí),經(jīng)常會(huì)碰到前端頁(yè)面訪問(wèn)多個(gè)二級(jí)域名的情況,跨域是首先要解決的問(wèn)題。解決這個(gè)問(wèn)題,可以從兩方面入手,一種方案是在微服務(wù)各自的業(yè)務(wù)模塊中實(shí)現(xiàn),即在SpringBoot層實(shí)現(xiàn),另外一種方案就是在Gateway層實(shí)現(xiàn)
    2023-02-02
  • Java 8中Stream API的這些奇技淫巧!你Get了嗎?

    Java 8中Stream API的這些奇技淫巧!你Get了嗎?

    這篇文章主要介紹了Java 8中Stream API的這些奇技淫巧!你Get了嗎?文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • springboot多模塊中的共用配置文件詳解

    springboot多模塊中的共用配置文件詳解

    這篇文章主要介紹了springboot多模塊中的共用配置文件詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • springboot中redis的緩存穿透問(wèn)題實(shí)現(xiàn)

    springboot中redis的緩存穿透問(wèn)題實(shí)現(xiàn)

    這篇文章主要介紹了springboot中redis的緩存穿透問(wèn)題實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • HashMap原理及手寫(xiě)實(shí)現(xiàn)部分區(qū)塊鏈特征

    HashMap原理及手寫(xiě)實(shí)現(xiàn)部分區(qū)塊鏈特征

    這篇文章主要為大家介紹了HashMap原理及手寫(xiě)實(shí)現(xiàn)部分區(qū)塊鏈特征,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 從零開(kāi)始Java實(shí)現(xiàn)Parser?Combinator

    從零開(kāi)始Java實(shí)現(xiàn)Parser?Combinator

    這篇文章主要為大家介紹了從零開(kāi)始Java實(shí)現(xiàn)Parser?Combinator過(guò)程及原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Java IO流之字符流的使用詳解

    Java IO流之字符流的使用詳解

    這篇文章主要圍繞Java中的字符流進(jìn)行介紹,包括字符輸入流、字符輸出流以及處理流異常的幾種方式。文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-08-08
  • Java字符串常量池示例詳解

    Java字符串常量池示例詳解

    作為最基礎(chǔ)的引用數(shù)據(jù)類型,Java設(shè)計(jì)者為 String 提供了字符串常量池以提高其性能,下面這篇文章主要給大家介紹了關(guān)于Java字符串常量池的相關(guān)資料,需要的朋友可以參考下
    2021-08-08

最新評(píng)論

邢台县| 夏河县| 麦盖提县| 高尔夫| 榆树市| 诸城市| 防城港市| 阿荣旗| 六安市| 鹰潭市| 仙居县| 老河口市| 山丹县| 康保县| 泾川县| 资阳市| 安仁县| 微山县| 通榆县| 武清区| 刚察县| 栖霞市| 勃利县| 高邑县| 新津县| 明光市| 屏东县| 长葛市| 苗栗市| 永福县| 右玉县| 电白县| 石城县| 岚皋县| 峡江县| 西乡县| 无为县| 贵德县| 奉化市| 六枝特区| 高淳县|