要睡觉了

最近被租房子弄的头疼,明天上班干活,后天请假去找房子。

 

windows下计时器  常见两种调用方式:1、settime(hwd,定义的计时器ID,毫秒时间,NULL)    2、settime(hwd,计时器ID,毫秒时间,timeproc回调函数)。

 

1是在WM_TIMER 中处理的。2是在回调函数timeproc中处理的。

 

killtime  任何时刻 停止 wm_timer 消息。

# 题目重述 请设计一个“教练和运动员”管理系统,满足以下需求: - 包含两类人员:运动员(乒乓球运动员、篮球运动员)和教练(乒乓球教练、篮球教练); - 所有人员都有姓名和年龄,并具备“睡觉”这一共同行为; - 乒乓球相关人员(运动员和教练)都必须会“说英语”; - 不同角色有不同的饮食习惯和技能学习/教学内容; - 要求合理使用抽象类和接口进行建模; - 输入四个人员信息(顺序:乒乓球运动员、篮球运动员、乒乓球教练、篮球教练); - 按指定格式输出每个人的行为特征。 测试输入: ``` 张继科 30 易建联 31 刘国梁 42 杜锋 37 ``` 预期输出: ``` 张继科---30 人都是要睡觉的 乒乓球运动员吃大白菜,喝小米粥 乒乓球运动员学习如何发球和接球 乒乓球运动员说英语 ---------------- 易建联---31 人都是要睡觉的 篮球运动员吃牛肉,喝牛奶 篮球运动员学习如何运球和投篮 ---------------- 刘国梁---42 人都是要睡觉的 乒乓球教练吃小白菜,喝大米粥 乒乓球教练教如何发球和接球 乒乓球教练说英语 ---------------- 杜锋---37 人都是要睡觉的 篮球教练吃羊肉,喝羊奶 篮球教练教如何运球和投篮 ---------------- ``` # 给出答案(答案为带注释的代码块) ```java import java.util.Scanner; // 共同行为:睡觉 —— 所有人都有的功能,使用抽象类实现共性 abstract class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // getter 方法 public String getName() { return name; } public int getAge() { return age; } // 共同行为:所有人都是要睡觉的 public void sleep() { System.out.println("人都是要睡觉的"); } // 抽象方法:饮食习惯由子类决定 public abstract void eat(); // 抽象方法:技能相关行为(学习或教学) public abstract void studyOrTeach(); } // 接口:说英语 —— 只有乒乓球相关人员需要实现 interface SpeakEnglish { void speak(); } // 运动员抽象类,继承Person abstract class Player extends Person { public Player(String name, int age) { super(name, age); } } // 教练抽象类,继承Person abstract class Coach extends Person { public Coach(String name, int age) { super(name, age); } } // 乒乓球运动员类:继承Player,实现SpeakEnglish接口 class PingPangPlayer extends Player implements SpeakEnglish { public PingPangPlayer(String name, int age) { super(name, age); } @Override public void eat() { System.out.println("乒乓球运动员吃大白菜,喝小米粥"); } @Override public void studyOrTeach() { System.out.println("乒乓球运动员学习如何发球和接球"); } @Override public void speak() { System.out.println("乒乓球运动员说英语"); } } // 篮球运动员类:继承Player,不需要说英语 class BasketballPlayer extends Player { public BasketballPlayer(String name, int age) { super(name, age); } @Override public void eat() { System.out.println("篮球运动员吃牛肉,喝牛奶"); } @Override public void studyOrTeach() { System.out.println("篮球运动员学习如何运球和投篮"); } } // 乒乓球教练类:继承Coach,实现SpeakEnglish接口 class PingPangCoach extends Coach implements SpeakEnglish { public PingPangCoach(String name, int age) { super(name, age); } @Override public void eat() { System.out.println("乒乓球教练吃小白菜,喝大米粥"); } @Override public void studyOrTeach() { System.out.println("乒乓球教练教如何发球和接球"); } @Override public void speak() { System.out.println("乒乓球教练说英语"); } } // 篮球教练类:继承Coach,不需要说英语 class BasketballCoach extends Coach { public BasketballCoach(String name, int age) { super(name, age); } @Override public void eat() { System.out.println("篮球教练吃羊肉,喝羊奶"); } @Override public void studyOrTeach() { System.out.println("篮球教练教如何运球和投篮"); } } // 测试类Task3 public class Task3 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String pppName = sc.next(); // 乒乓球运动员姓名 int pppAge = sc.nextInt(); // 年龄 String bpName = sc.next(); // 篮球运动员姓名 int bpAge = sc.nextInt(); // 年龄 String ppcName = sc.next(); // 乒乓球教练姓名 int ppcAge = sc.nextInt(); // 年龄 String bcName = sc.next(); // 篮球教练姓名 int bcAge = sc.nextInt(); // 年龄 // 创建乒乓球运动员对象 PingPangPlayer ppp = new PingPangPlayer(pppName, pppAge); System.out.println(ppp.getName() + "---" + ppp.getAge()); ppp.sleep(); // 共同行为 ppp.eat(); // 特定饮食 ppp.studyOrTeach(); // 学习技能 ppp.speak(); // 实现接口方法 System.out.println("----------------"); // 创建篮球运动员对象 BasketballPlayer bp = new BasketballPlayer(bpName, bpAge); System.out.println(bp.getName() + "---" + bp.getAge()); bp.sleep(); // 共同行为 bp.eat(); // 特定饮食 bp.studyOrTeach(); // 学习技能 System.out.println("----------------"); // 创建乒乓球教练对象 PingPangCoach ppc = new PingPangCoach(ppcName, ppcAge); System.out.println(ppc.getName() + "---" + ppc.getAge()); ppc.sleep(); // 共同行为 ppc.eat(); // 特定饮食 ppc.studyOrTeach(); // 教学技能 ppc.speak(); // 实现接口方法 System.out.println("----------------"); // 创建篮球教练对象 BasketballCoach bc = new BasketballCoach(bcName, bcAge); System.out.println(bc.getName() + "---" + bc.getAge()); bc.sleep(); // 共同行为 bc.eat(); // 特定饮食 bc.studyOrTeach(); // 教学技能 System.out.println("----------------"); } } ``` # 代码解析 1. **类层次结构设计**: - `Person` 为顶层抽象类,封装所有人员共有的属性(name、age)和行为(sleep),并定义抽象方法 `eat()` 和 `studyOrTeach()`。 - `Player` 和 `Coach` 分别继承 `Person`,代表运动员和教练两大类别,便于分类管理。 - 具体角色(如 `PingPangPlayer`)进一步继承并实现具体逻辑。 2. **接口的应用**: - 定义 `SpeakEnglish` 接口,仅被乒乓球相关类(`PingPangPlayer` 和 `PingPangCoach`)实现,表示“只有乒乓球人员才需要说英语”。 - 篮球相关人员无需实现该接口,体现了接口的灵活性和精准控制能力。 3. **多态与抽象方法**: - `eat()` 和 `studyOrTeach()` 作为抽象方法,在不同子类中有不同实现,体现行为差异。 - 父类统一定义行为契约,子类负责具体内容。 4. **输出控制**: - 每个对象依次输出姓名+年龄 → 睡觉 → 饮食 → 技能 → 英语(如有)→ 分隔线。 - 严格匹配预期格式,包括换行和分隔符 `----------------`。 # 知识点(列出该代码中遇到的知识点) - **抽象类**:用于抽取多个类的共性,包含抽象方法,不能实例化,子类必须重写抽象方法。 - **接口(Interface)**:定义行为规范,实现类按需实现,支持多重实现,适合描述“具备某种能力”。 - **继承与多态**:通过继承实现代码复用,通过父类引用调用子类重写方法,实现运行时多态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值