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

Java實例講解多態數組的使用

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

多態概述

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

多態存在的三個必要條件

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

2.要有方法的重寫

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

注:

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

2.在方法中調用屬性,無特殊情況為本類屬性

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

1.向上轉型

1.對象的向上轉型,其實就是多態寫法:

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

  含義:右側創建了一個子類對象,把它當作父類來看待使用。

Person person=new student();

          創建了一個學生對象,當作人看待,沒有問題。
          此時的編譯類型為person,運行類型為學生;

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

2.向下轉型

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

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

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

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

   a.必須保證對象本來創建的時候就是貓,才能向下轉型成為貓

   b.如果對象創建的時候不是貓,現在非要向下轉型成為貓,就會報錯

多態數組

建立一個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++)
        {
            //動態綁定機制
            //person[i]編譯類型是Person,運行類型是根據實際情況判斷的
            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;
    }
}

運行結果

多態數組+向下轉型

instanceof關鍵字

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

用法: result = object instanceof class

result為boolean類型

參數:

Result:布爾類型。

Object:必選項。任意對象表達式。

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

說明:

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

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

但是instanceof在Java的編譯狀態和運行狀態是有區別的;

注:

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

在運行轉態中,class可以是object對象的父類,自身類,不能是子類。在前兩種情況下result的結果為true,最后一種為false。但是class為子類時編譯不會報錯。運行結果為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++)
        {
            //動態綁定機制
            //person[i]編譯類型是Person,運行類型是根據實際情況判斷的
            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()+"正在上課";
    }
}

運行結果

到此這篇關于Java實例講解多態數組的使用的文章就介紹到這了,更多相關Java多態數組內容請搜索html5模板網以前的文章希望大家以后多多支持html5模板網!

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

相關文檔推薦

主站蜘蛛池模板: 男人天堂网址 | 亚洲成人久久久 | 日韩国产中文字幕 | 欧美激情精品久久久久久变态 | 精品欧美黑人一区二区三区 | 91精品久久久久久久久 | 精品国产一区二区三区久久 | 国产精品美女www | 久久精品国产免费高清 | 国产香蕉视频在线播放 | 久久狠狠| 久久国产精品偷 | 天天射中文 | 一区二区三区av夏目彩春 | 精品久久香蕉国产线看观看亚洲 | 美女久久久久久久 | 在线观看中文字幕 | 精品久久久久久久久久久久 | 久草免费在线视频 | 久久久久1| 拍真实国产伦偷精品 | 国产日韩欧美二区 | 国产成人综合久久 | 久久久久久久久久久久久久久久久久久久 | 日韩午夜电影在线观看 | 成人免费在线观看视频 | 91精品久久久久久久久 | 一级做a| 久久精品视频在线观看 | 久久久九九九九 | 亚洲精品一区二区 | 狠狠干2020 | 日日日日日日bbbbb视频 | 欧美精品在线视频 | 国产成人高清视频 | 国产精品一区视频 | 精品亚洲一区二区 | 在线观看a视频 | 伊人婷婷 | 亚洲欧美一区二区在线观看 | 日韩三区 |