抽象類練習_學生與工人

xkfx發表於2024-11-24

問題描述

編寫一個Person抽象類,要求含有姓名(name)、年齡(age)兩個私有屬性以及吃飯(eat)和睡覺(sleep)兩個抽象方法,並新增帶參構造方法為name和age賦初值。

建立學生(Student)類並繼承Person類,學生類多出了私有屬性學號學習方法(輸出我愛學習)。

建立工人(Worker)類並繼承Person類,工人類多出了私有屬性工號工作方法(輸出我愛工作),

在主函式中建立學生和工人類的例項物件,使用構造方法賦值,並輸出所有屬性和方法。

輸出結果如下:

姓名:張三,年齡:20,學號:1024
食堂吃飯
我愛學習
在宿舍睡覺
姓名:李四,年齡:35,工號:1025
自己做飯
我愛工作
在家睡覺

參考程式碼

Person類

public abstract class Person {
    private String name; // String是基本型別嗎?如果不是,那是什麼型別
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public abstract void eat(); // 抽象方法的訪問許可權只能是public嗎?

    public abstract void sleep();

    @Override
    public String toString() {
        return "姓名:" + name + ", 年齡:" + age;
    }
}

學生類

public class Student extends Person {
    private int id;

    public Student(String name, int age, int id) {
        super(name, age);
        this.id = id;
    }

    @Override
    public void eat() {
        System.out.println("食堂吃飯");
    }

    @Override
    public void sleep() {
        System.out.println("在宿舍睡覺");
    }

    public void study() {
        System.out.println("我愛學習");
    }

    @Override
    public String toString() {
        return super.toString() + ", 學號:" + id;
    }
}

工人類

public class Worker extends Person {
    private int id;

    public Worker(String name, int age, int id) {
        super(name, age);
        this.id = id;
    }

    @Override
    public void eat() {
        System.out.println("自己做飯");
    }

    @Override
    public void sleep() {
        System.out.println("在家睡覺");
    }

    public void work() {
        System.out.println("我愛工作");
    }

    @Override
    public String toString() {
        return super.toString() + ", 工號:" + id;
    }
}

相關文章