抽象类练习_学生与工人
问题描述
编写一个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;
}
}
主函数
public class Main {
public static void main(String[] args) {
Student student = new Student("张三", 20, 12);
System.out.println(student);
student.eat();
student.study();
student.sleep();
Worker worker = new Worker("李四", 27, 47);
System.out.println(worker);
worker.eat();
worker.work();
worker.sleep();
}
}
输出结果:
姓名:张三, 年龄:20, 学号:12
食堂吃饭
我爱学习
在宿舍睡觉
姓名:李四, 年龄:27, 工号:47
自己做饭
我爱工作
在家睡觉