一、前言
一道题检测你是否掌握了抽象类、抽象方法和接口,相关知识点请在【Java进阶学习篇】中点击查看
二、题目
现在有乒乓球运动员和教练、篮球运动员和教练,他们具体行为如下
属性 |
行为 | |
乒乓球运动员 | 姓名、年龄 | 学打乒乓球、说英语 |
乒乓球教练 | 姓名、年龄 | 打乒乓球 |
篮球运动员 | 姓名、年龄 | 学打篮球、说英语 |
篮球运动员 | 姓名、年龄 | 打篮球 |
三、题目分析
1.画图
2.接口
此处只有学英语是部分人有的,使用接口为English:学英语
public interface English { public abstract void learnEnglish(); }
3.继承关系
此处我的解法是 将行为是学的分为一类,行为是教的分为一类,运动员Athletes和教练Coach是子类,而 Person是超类,属性为姓名 name 和年龄 age
4.抽象方法
1️⃣Athletes类
public abstract void learn();
2️⃣Coach类
public abstract void teach();
5.重写方法
在子类中,对于接口和抽象方法要进行方法体的重写,且要继承属性
四、代码实现
1.接口
public interface English { public abstract void learnEnglish(); }
2.超类(最大父类)
public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
3.父类
1️⃣运动员Athletes类
public abstract class Athletes extends Person { public Athletes(String name, int age) { super(name, age); } public abstract void learn(); }
2️⃣教练Coach类
public abstract class Coach extends Person { public Coach(String name, int age) { super(name, age); } public abstract void teach(); }
4.子类
1️⃣PinPangPlayer
public class PinPangPlayer extends Athletes implements English{ public PinPangPlayer(String name, int age) { super(name, age); } @Override public void learn() { System.out.println("学打乒乓球"); } @Override public void learnEnglish() { System.out.println("说英语"); } }
2️⃣BasketballPlayer
public class BasketballPlayer extends Athletes { public BasketballPlayer(String name, int age) { super(name, age); } @Override public void learn() { System.out.println("学打篮球"); } }
3️⃣PinpangCoach
public class PinpangCoach extends Coach implements English{ public PinpangCoach(String name, int age) { super(name, age); } @Override public void teach() { System.out.println("教打乒乓球"); } @Override public void learnEnglish() { System.out.println("说英语"); } }
4️⃣BasketballCoach
public class BasketballCoach extends Coach { public BasketballCoach(String name, int age) { super(name, age); } @Override public void teach() { System.out.println("教打篮球"); } }
五、测试代码
六、注意事项
在子类中如果要继承接口要用implements,继承父类要用extends,不可混淆,并且在继承以后都要重写方法,否则会报错
七、小结
本文的分类不唯一,也可以将乒乓球分为一类,篮球分为一类,也可以达到同样效果,感兴趣的读者可以自己尝试一下