久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

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

本文章向大家介紹Java多態(tài)數(shù)組,主要包括Java多態(tài)數(shù)組使用實例、基本知識點總結(jié)和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下

多態(tài)概述

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

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

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

2.要有方法的重寫

3.要有父類引用指向子類對象

注:

1. 運行方法看運行類型,屬性看編譯類型

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

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

1.向上轉(zhuǎn)型

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

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

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

Person person=new student();

          創(chuàng)建了一個學(xué)生對象,當(dāng)作人看待,沒有問題。
          此時的編譯類型為person,運行類型為學(xué)生;

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

2.向下轉(zhuǎn)型

2.對象的向下轉(zhuǎn)型,其實就是一個還原的動作:

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

   含義:將子類還原,還原成為本來的子類對象

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

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

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

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

建立一個polyArr包

Arrtest.java

package com.polyArr;
public class Arrtest {
    public static void main(String[] args) {
        //父類的引用可以指向子類的對象
        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++)
        {
            //動態(tài)綁定機(jī)制
            //person[i]編譯類型是Person,運行類型是根據(jù)實際情況判斷的
            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;
    }
}

運行結(jié)果

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

instanceof關(guān)鍵字

運算符是用來在運行時指出對象是否是特定類的一個實例。instanceof通過返回一個布爾值來指出,這個對象是否是這個特定類或者是它的子類的一個實例。

用法: result = object instanceof class

result為boolean類型

參數(shù):

Result:布爾類型。

Object:必選項。任意對象表達(dá)式。

Class:必選項。任意已定義的對象類。

說明:

如果 object 是 class 的一個實例,則 instanceof 運算符返回 true。如果 object

不是指定類的一個實例,或者 object 是 null,則返回 false。

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

注:

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

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

建立一個polyArr包

Arrtest.java

package com.polyArr;
public class Arrtest {
    public static void main(String[] args) {
        //父類的引用可以指向子類的對象
        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++)
        {
            //動態(tài)綁定機(jī)制
            //person[i]編譯類型是Person,運行類型是根據(jù)實際情況判斷的
            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()+"正在上課";
    }
}

運行結(jié)果

到此這篇關(guān)于Java實例講解多態(tài)數(shù)組的使用的文章就介紹到這了,更多相關(guān)Java多態(tài)數(shù)組內(nèi)容請搜索html5模板網(wǎng)以前的文章希望大家以后多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

主站蜘蛛池模板: 色妞色视频一区二区三区四区 | 中文字幕黄色片 | www.色日本 | 国产在线视频一区 | 亚洲黄色在线视频 | 国产黄色免费 | 成人午夜视频在线观看 | 亚洲一区在线看 | 9l视频自拍九色9l视频成人 | 免费看黄色一级片 | 人人干人人爱 | 亚洲成人一区二区 | 欧美在线免费观看视频 | 国 产 黄 色 大 片 | 一级黄色免费视频 | 婷婷色综合 | 谁有毛片网址 | 欧美日韩免费在线观看 | 欧美人与野 | 精品在线一区 | 日本成人精品 | 亚洲久久久| 国产浮力第一页 | 国产一级网站 | 国产视频黄 | avxxxxx| 精品亚洲一区二区三区 | 日韩精品在线免费观看 | 成人免费在线观看网站 | 免费一级黄色录像 | 中文字幕在线观看一区 | www.日韩 | www.夜夜骑 | 色哟哟一区二区三区 | 在线免费看黄网站 | 人人综合 | 天天干夜夜操 | 亚洲一区在线观看视频 | 在线观看国产小视频 | 精品国产乱码久久久久久88av | 日韩一区二区中文字幕 |