一道题检测你是否掌握了抽象类、抽象方法和接口,相关知识点请在【Java进阶学习篇】中点击查看
现在有乒乓球运动员和教练、篮球运动员和教练,他们具体行为如下
| 属性 | 行为 | |
|---|---|---|
| 乒乓球运动员 | 姓名、年龄 | 学打乒乓球、说英语 |
| 乒乓球教练 | 姓名、年龄 | 打乒乓球 |
| 篮球运动员 | 姓名、年龄 | 学打篮球、说英语 |
| 篮球运动员 | 姓名、年龄 | 打篮球 |

此处只有学英语是部分人有的,使用接口为English:学英语
public interface English {
public abstract void learnEnglish();
}
此处我的解法是 将行为是学的分为一类,行为是教的分为一类,运动员Athletes和教练Coach是子类,而 Person是超类,属性为姓名 name 和年龄 age
public abstract void learn();
public abstract void teach();
在子类中,对于接口和抽象方法要进行方法体的重写,且要继承属性
public interface English {
public abstract void learnEnglish();
}
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;
}
}
public abstract class Athletes extends Person {
public Athletes(String name, int age) {
super(name, age);
}
public abstract void learn();
}
public abstract class Coach extends Person {
public Coach(String name, int age) {
super(name, age);
}
public abstract void teach();
}
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("说英语");
}
}
public class BasketballPlayer extends Athletes {
public BasketballPlayer(String name, int age) {
super(name, age);
}
@Override
public void learn() {
System.out.println("学打篮球");
}
}
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("说英语");
}
}
public class BasketballCoach extends Coach {
public BasketballCoach(String name, int age) {
super(name, age);
}
@Override
public void teach() {
System.out.println("教打篮球");
}
}

在子类中如果要继承接口要用implements,继承父类要用extends,不可混淆,并且在继承以后都要重写方法,否则会报错
本文的分类不唯一,也可以将乒乓球分为一类,篮球分为一类,也可以达到同样效果,感兴趣的读者可以自己尝试一下