接口和抽象类综合题
一、前言
一道题检测你是否掌握了抽象类、抽象方法和接口,相关知识点请在【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,不可混淆,并且在继承以后都要重写方法,否则会报错
七、小结
本文的分类不唯一,也可以将乒乓球分为一类,篮球分为一类,也可以达到同样效果,感兴趣的读者可以自己尝试一下