JAVA學生的生活(多態)

多態性是面向對象編程的基礎。它允許多個方法使用同一個接口。Java從多個方面支持多態性,最爲突出的是:每個方法都可以被子類重寫;設立interface關鍵字。當把子類對象當作父類對象來看時,就只能調用父類中原有定義的屬性和方法。子類自己擴展的屬性和方法就不能調用了。當把子類對象當作父類對象來看時,如果子類重寫了父類中的方法,則調用該方法時調用的是子類重寫後的方法。

 package JAVA_Project_01_05;

//· 多態性是面向對象編程的基礎。它允許多個方法使用同一個接口。Java從多個方面支持多態性,最爲突出的是:每個方法都可以被子類重寫;設立interface關鍵字。
//
//· 當把子類對象當作父類對象來看時,就只能調用父類中原有定義的屬性和方法。子類自己擴展的屬性和方法就不能調用了。
//
//· 當把子類對象當作父類對象來看時,如果子類重寫了父類中的方法,則調用該方法時調用的是子類重寫後的方法。

import java.util.Date;//引入類


class Student {//學生父類

    String name;//學生名稱

    Date date= new Date();

    int hour=date.getHours();//獲得時間

    public void goToSchol(Student student) {//去上學的方式

        Student stu = new Student();

        if (this.hour<=7&&this.hour>5){

            this.clockMe(stu);

        }else{

            System.out.println("洗臉刷牙");

        }

    }

    public void clockMe(Student stu) {

        System.out.println("叮鈴鈴...叮鈴鈴..." + this.name + "起牀了");

    }

}

class Pupil extends Student {//小學生

    public void goToSchool(Student student) {//去上學的方式

        System.out.println("我是小學生");

        Pupil pupil = new Pupil();

        if (hour<= 6 && hour>5){

            this.clockMe(pupil);

        }else{

            System.out.println("要鍛鍊身體!!!");

        }

    }

    public void clockMe(Student stu) {

        System.out.println("小鳥咕咕叫..." + this.name + "起牀了");

    }

    public void showInfo() {

        System.out.println("我是小學生!");

    }

}

class Undergraduate extends Student {//大學生

    public void goToSchool(Student stu) {

        System.out.println("我是大學生");

        Undergraduate graduate = new Undergraduate();

        if (hour<=9&&hour>5){

            this.clockMe(graduate);

        }else{

            System.out.println("繼續睡覺!!!");

        }

    }

    public void clockMe(Student me) {

        System.out.println("小鼓咚咚咚..." + this.name + "起牀了");

    }

    public void showInfo() {

        System.out.println("我是大學生!");

    }

}

public class TextPolymiorphism {//操作運用多態展示學生生活的類

    public static void main(String[] args) {//Java程序主入口處

        System.out.println("1.當時間在5-7點時");

        //System.out.println("2.當時間不在5-7點時");

        Student student = new Pupil();//實例化對象

        student.name = "Susan";

        student.goToSchol(student);//調用去上學方式

        // student.showInfo();

        student = new Undergraduate();//實例化對象

        student.name = "Tom";

        student.goToSchol(student);//調用去上學方式

        Pupil pupil = new Pupil();//實例化小學生對象

        pupil.goToSchool(pupil);

        pupil.showInfo();

    }

}

//(1)程序中定義學生超類以及繼承超類的兩個子類。在超類中定義去上學方式以及鈴聲起牀兩個方法。兩個子類根據起牀時間不同重寫超類的方法。
//
//(2)在main()主方法中,超類變量引用子類對象,創建可以把子類對象當作超類對象的實例。這樣子類自己擴展的屬性和方法就不能調用了,
// 只能調用父類的,比如子類方法中的showInfo()方法在這種情況下子類就不能調用。由於子類重寫父類的方法,在調用方法goToSchool()時,
// 由於時間不同,子類重寫clockMe()方法,則調用該方法時調用的是子類重寫後的方法。當實例化子類對象時,子類可以調用自己擴展及重寫的屬性及方法。
發佈了71 篇原創文章 · 獲贊 12 · 訪問量 4538
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章