java国家队队员的继承

某国家队有队员(member)数名,包括运动员(player)和教练(coach),其中运动员和教练都有自己的姓名(name)、年龄(age)、身高(height)、体重(weight)属性,都要去参加比赛(competition),但二者不同的是,教练参加比赛是为了指导运动员,而运动员参加比赛是与其他选手PK。且为了出国交流,教练需要学习英语(learnEnglish)。要求利用抽象类、多态和接口实现,并在测试类(Test)中进行测试。

abstract class Member {
    private String name;
    private int age;
    private int height;
    private int weight;

    public Member(String name, int age, int height, int weight) {
        this.name = name;
        this.age = age;
        this.height = height;
        this.weight = weight;
    }

    public abstract void competition();
}

interface LearnEnglish {
    void learnEnglish();
}

class Player extends Member {
    public Player(String name, int age, int height, int weight) {
        super(name, age, height, weight);
    }

    @Override
    public void competition() {
        System.out.println("Player is competing with other players.");
    }
}

class Coach extends Member implements LearnEnglish {
    public Coach(String name, int age, int height, int weight) {
        super(name, age, height, weight);
    }

    @Override
    public void competition() {
        System.out.println("Coach is coaching the players in the competition.");
    }

    @Override
    public void learnEnglish() {
        System.out.println("Coach is learning English.");
    }
}

class Test {
    public static void main(String[] args) {
        Member player = new Player("Tom", 20, 180, 75);
        Member coach = new Coach("Jerry", 35, 170, 65);

        player.competition();
        coached.competition();
        ((Coach) coached).learnEnglish();
    }
}


详细代码如下

// 定义 Member 类
public abstract class Member {
  private String name;
  private int age;
  private double height;
  private double weight;

  public Member(String name, int age, double height, double weight) {
    this.name = name;
    this.age = age;
    this.height = height;
    this.weight = weight;
  }

  public abstract void competition();  // 参加比赛

  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 double getHeight() {
    return height;
  }

  public void setHeight(double height) {
    this.height = height;
  }

  public double getWeight() {
    return weight;
  }

  public void setWeight(double weight) {
    this.weight = weight;
  }
}

public class Coach extends Member implements LearnEnglish {
    private int level; // 教练英语水平,1~5 级
    private String certificate; // 英语教师证书

    public Coach(String name, int age, double height, double weight, int level, String certificate) {
        super(name, age, height, weight);
        this.level = level;
        this.certificate = certificate;
    }

    @Override
    public void competition() {
        System.out.println("Coach " + getName() + " is coaching players in the competition.");
    }

    @Override
    public void learnEnglish() {
        System.out.println("Coach " + getName() + " is learning English.");
    }

    public int getLevel() {
        return level;
    }

    public void setLevel(int level) {
        this.level = level;
    }

    public String getCertificate() {
        return certificate;
    }

    public void setCertificate(String certificate) {
        this.certificate = certificate;
    }
}
public class Test {
    public static void main(String[] args) {
        // 创建 Coach 和 Player 对象
        Coach coach = new Coach("李四", 38, 176, 80, "足球");
        Player player = new Player("张三", 22, 180, 75, "足球");
        
        // Coach 和 Player 参加比赛
        coached.competition();
        player.competition();
        
        // Coach 学习英语
        coached.learnEnglish();
    }
}
  • 首先 定义 接口类 ICompetition,有一个比赛的方法
  • 定义抽象队员类 Member,实现 ICompetition接口
  • 定义教练 和 运动员,继承 Member
  • 主类Main用于演示

先看下效果图:

img

/**
 * @author huazie
 * @version 2.0.0
 * @since 2.0.0
 */
public interface ICompetition {

    /**
     * 比赛
     */
    void competition();
}

public abstract class Member implements ICompetition{

    protected String name;

    protected Integer age;

    protected Integer height;

    protected Integer weight;

    public Member() {
    }

    public Member(String name, Integer age, Integer height, Integer weight) {
        this.name = name;
        this.age = age;
        this.height = height;
        this.weight = weight;
    }
}

public class Coach extends Member {

    public Coach() {
    }

    public Coach(String name, Integer age, Integer height, Integer weight) {
        super(name, age, height, weight);
    }

    @Override
    public void competition() {
        System.out.println("教练【" + name + "】参加比赛是指导运动员");
    }

    public void learnEnglish() {
        System.out.println("教练【" + name + "】学习英文");
    }
}

public class Player extends Member {

    public Player() {
        super();
    }

    public Player(String name, Integer age, Integer height, Integer weight) {
        super(name, age, height, weight);
    }

    @Override
    public void competition() {
        System.out.println("运动员【" + name + "】参加比赛与别人PK");
    }
}

public class Main {

    public static void main(String[] args) {
        ICompetition member1 = new Coach("Hello", 30, 180, 80);
        ICompetition member2 = new Player("Huazie", 20, 185, 70);

        member1.competition();
        member2.competition();

        ((Coach) member1).learnEnglish();
    }
}