点击返回标题->23年Java期末复习-CSDN博客
第1题.
设计一个学生类Student,其数据成员有name(姓名)、age(年龄)和degree(学位)。由Student类派生出本科生类Undergraduate和研究生类Graduate,本科生类Undergraduate增加成员specialty(专业),研究生类增加成员direction(研究方向)。每个类都有show()方法,用于输出数据成员信息。最后请输出下列信息:
public class Main {
public static void main(String[] args) {
Undergraduate u1 = new Undergraduate("张三", 20, "本科", "通信");
Undergraduate u2 = new Undergraduate("李四", 21, "本科", "电子");
Graduate g1 = new Graduate("王五", 25, "硕士", "通信");
Graduate g2 = new Graduate("刘六", 36, "博士", "通信");
u1.show();
u2.show();
g1.show();
g2.show();
}
}
abstract class Student{
String name, degree;
int age;
abstract void show();//定义为抽象方法,Student也必须为抽象类
}
class Undergraduate extends Student{
String specialty;
Undergraduate(String name, int age, String degree, String specialty){//有参构造
this.name = name;
this.age = age;
this.degree = degree;
this.specialty = specialty;
}
@Override
void show() {//实现父类抽象方法
//格式化输出建议使用printf
System.out.printf("姓名:%s\t年龄:%d\t学位%s\t专业:%s\n",
this.name, this.age, this.degree, this.specialty);
}
}
class Graduate extends Student{
String direction;
Graduate(String name, int age, String degree, String direction){//有参构造
this.name = name;
this.age = age;
this.degree = degree;
this.direction = direction;
}
@Override
void show() {//实现父类抽象方法
//格式化输出建议使用printf
System.out.printf("姓名:%s\t年龄:%d\t学位%s\t研究方向:%s\n",
this.name, this.age, this.degree, this.direction);
}
}
第2题.
有工人、服务员、教师、科学家四种角色,其中服务员、工人只有月固定工资(元/月),教师除月固定工资外,还有课酬(元/节)。科学家除月固定工资外,还有科研激励奖(元/季度)。请通过继承设计出相应的类,将各种类型的员工的全年工资打印出来,并测试(张三、工人、4000元/月)、(李四、服务员、3500元/月)、(王五、教师、5000元/月、100元/节,200节/年)、(刘六、科学家、7000元/月、20000元/季度)。
public class Main{
public static void main(String[] args) {
profession p1 = new profession("张三", "工人", 4000);
profession p2 = new profession("李四", "服务员", 3500);
teacher t1 = new teacher("王五", "教师", 5000, 100, 200);
scientist s1 = new scientist("刘六", "科学家", 7000, 20000);
p1.show();
p2.show();
t1.show();
s1.show();
}
}
//有工人、服务员、教师、科学家四种角色,
//其中服务员、工人只有月固定工资(元/月),教师除月固定工资外,还有课酬(元/节)。科学家除月固定工资外,还有科研激励奖(元/季度)
//分析得出:工人和服务员可视作同类,下面命名为profession,教师和科学家可作为profession类的两个子类
class profession{
String name, job;
int salary;
profession(){//无参构造供其子类的有参构造进行默认调用。(因为子类的构造方法如果没有用super关键字调用父类的构造方法,则会隐含一个super()去调用父类的无参构造)
}
profession(String name, String job, int salary){//有参构造
this.name = name;
this.job = job;
this.salary = salary;
}
void show() {//此处不应定义为抽象方法,因为profession类存在需要示例化的对象(即工人或服务员)
System.out.printf("%s、%s、%d元/月\n", this.name, this.job, this.salary);
}
}
class teacher extends profession{
int class_reward, class_nums;
teacher(String name, String job, int salary, int class_reward, int class_nums){//有参构造
this.name = name;
this.job = job;
this.salary = salary;
this.class_reward = class_reward;
this.class_nums = class_nums;
}
@Override
void show() {
System.out.printf("%s、%s、%d元/月、%d元/节, %d节/年\n", this.name, this.job, this.salary, this.class_reward, this.class_nums);
}
}
class scientist extends profession{
int research_reward;
scientist(String name, String job, int salary, int research_reward){//有参构造
this.name = name;
this.job = job;
this.salary = salary;
this.research_reward = research_reward;
}
@Override
void show() {
System.out.printf("%s、%s、%d元/月、%d元/季度\n", this.name, this.job, this.salary, this.research_reward);
}
}
第3题.
根据下述继承关系图,请完成父类Pet 、子类Dog、Penguin的设计,并写一个测试类,测试类中完成狗对象的创建与输出,企鹅对象的创建与输出。
public class Main{
public static void main(String[] args) {
//测试,对Dog类对象采取有参构造实例化并赋值,print()方法输出,对Penguin类对象采取无参构造实例化、setter方法赋值,getter方法配合printf输出
Dog d = new Dog("小狗", 100, 20, "牧羊犬");
d.print();
Penguin p = new Penguin();
p.setName("Q仔");
p.setHealth(101);
p.setLove(21);
p.setSex("雄");
System.out.printf("姓名:%s\t健康度:%d\t好感度:%d\t\t品系:%s\n", p.name, p.health, p.love, p.sex);
}
}
abstract class Pet{
String name;
int health, love;
abstract void print();
abstract String getName();
abstract int getHealth();
abstract int getLove();
}
class Dog extends Pet{
String strain;//品系
Dog(){//无参构造
}
Dog(String name, int health, int love, String strain){//有参构造
this.name = name;
this.health = health;
this.love = love;
this.strain = strain;
}
void print() {
System.out.printf("姓名:%s\t健康度:%d\t好感度:%d\t\t品系:%s\n", this.name, this.health, this.love, this.strain);
}
String getName() {
// TODO Auto-generated method stub
return this.name;
}
int getHealth() {
// TODO Auto-generated method stub
return this.health;
}
int getLove() {
// TODO Auto-generated method stub
return this.love;
}
}
class Penguin extends Pet{
String sex;//性别
Penguin(){//无参构造
}
Penguin(String name, int health, int love, String sex){//有参构造
this.name = name;
this.health = health;
this.love = love;
this.sex = sex;
}
void print() {
System.out.printf("姓名:%s\t健康度:%d\t好感度:%d\t性别:%s", this.name, this.health, this.love, this.sex);
}
String getName() {
// TODO Auto-generated method stub
return this.name;
}
int getHealth() {
// TODO Auto-generated method stub
return this.health;
}
int getLove() {
// TODO Auto-generated method stub
return this.love;
}
void setName(String name) {
this.name = name;
}
void setHealth(int health) {
this.health = health;
}
void setLove(int love) {
this.love = love;
}
void setSex(String sex) {
this.sex = sex;
}
}