通过案例了解java中的接口、抽象类以及类
需求:我们现在有乒乓球运动员和篮球运动员,乒乓球教练和篮球教练。为了出国交流,跟乒乓球相关的人员需要学习英语。请用所学知识分析,这个案例中有哪些具体类,哪些抽象类,哪些接口,并用代码实现
问题分析:
- 按照教练与运动员分,可分为两类,而这两类又有相同的属性和方法,比如姓名和年龄,所以这两个类可以继承同一个类
- 只有乒乓球相关的人员需要学习英语,所以学习英语可以放在接口中,只有当使用的时候才实现这个接口
- 运动员中共有的属性和方法可以放在同一个抽象类中,用于继承,同样的教练类也是
思路:
- 定义说英语接口 成员方法:说英语();
- 定义抽象人类 成员变量:姓名,年龄; 构造方法:无参,带参; 成员方法:get/set方法,吃饭()
- 定义抽象教练类,继承类 构造方法:无参,带参; 成员方法:教();
- 定义抽象运动员类,继承人类 构造方法:无参,带参; 成员方法:学习()
- 定义具体篮球教练类,继承教练类 构造方法:无参,带参; 成员方法:重写吃饭(){},重写教(){}
- 定义具体乒乓球教练类,继承教练类,实现说英语接口 构造方法:无参,带参; 成员方法:重写吃饭(){},重写教(){},重写说英语(){}
…
说英语接口
public interface SpeakEnglish {
public abstract void speakEnglish();
}
抽象人类
public abstract class Person {
private String name;
public 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 void eat();
}
抽象运动员类
public abstract class Athletes extends Person{
public Athletes() {
}
public Athletes(String name, int age) {
super(name, age);
}
public abstract void study();
}
抽象教练类
public abstract class Coach extends Person{
public Coach() {
}
public Coach(String name, int age) {
super(name, age);
}
public abstract void teach();
}
具体乒乓球运动员类
public class PingpongAthlete extends Athletes implements SpeakEnglish{
public PingpongAthlete() {
}
public PingpongAthlete(String name, int age) {
super(name, age);
}
@Override
public void speakEnglish() {
System.out.println("speakEnglish");
}
@Override
public void study() {
System.out.println("学习乒乓球");
}
@Override
public void eat() {
System.out.println(getName()+"吃饭");
}
}
具体乒乓球教练类
public class PingpongCoach extends Coach implements SpeakEnglish{
public PingpongCoach() {
}
public PingpongCoach(String name, int age) {
super(name, age);
}
@Override
public void speakEnglish() {
System.out.println("speakEnglish");
}
@Override
public void teach() {
System.out.println("教乒乓球");
}
@Override
public void eat() {
System.out.println(getName()+"吃饭");
}
}
测试代码
public class Main {
public static void main(String[] args) {
PingpongAthlete malong = new PingpongAthlete("malong", 30);
malong.speakEnglish();
malong.eat();
malong.study();
PingpongCoach liu = new PingpongCoach("liu", 50);
liu.speakEnglish();
liu.eat();
liu.teach();
}
}
输入结果
speakEnglish
malong吃饭
学习乒乓球
speakEnglish
liu吃饭
教乒乓球