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()方法,则调用该方法时调用的是子类重写后的方法。当实例化子类对象时,子类可以调用自己扩展及重写的属性及方法。
发布了70 篇原创文章 · 获赞 10 · 访问量 3185

猜你喜欢

转载自blog.csdn.net/JN_Cat/article/details/103994914