教练和运动员案例

题目:

  乒乓球运动员和篮球运动员。

  乒乓球教练和篮球教练。

  为了出国交流,跟乒乓球相关的人员都需要学习英语。

  请用所学的知识:

    分析,这个案例中有哪些抽象类,哪些接口,哪些具体类。

这篇博客的主要目的是:

  要明白在分析问题的时候,是从具体到抽象,在实现的时候是从抽象到具体,如果问题和人有关,那么抽象出来的类更多的以人为本(比如本例,可能有人会分析出乒乓球类,其实也没有问题,只是以人为本更好)。下面的代码并不重要,明白如何抽象出下图中的类就好了。

 

interface SpeakEnglish {
    // speak English
    public abstract void speak();
}

abstract class Person {
    private String mName;
    private int mAge;
    
    public Person() {}
    
    public Person(String name, int age) {
        mName = name;
        mAge = age;
    }
    
    public void setName(String name) {
        mName = name;
    }
    
    public String getName() {
        return mName;
    }

    public void setAge(int age) {
        mAge = age;
    }
    
    public int getAge() {
        return mAge;
    }
    
    // sleep
    public void sleep() {
        System.out.println("sleep");
    }
    
    // eat
    public abstract void eat();
}

abstract class Player extends Person{
    public Player() {}
    
    public Player(String name, int age) {
        super(name, age);
    }
    
    // study
    public abstract void study();
}

abstract class Coach extends Person{
    public Coach() {}
    
    public Coach(String name, int age) {
        super(name, age);
    }
    
    // teach
    public abstract void teach();
}

class PingPangPlayer extends Player implements SpeakEnglish {
    public PingPangPlayer() {}
    
    public PingPangPlayer(String name, int age) {
        super(name, age);
    }
    
    @Override
    public void eat() {
        System.out.println("PingPangPlayer eat Chinese cabbage and drink millet gruel.");
    }
    
    @Override
    public void study() {
        System.out.println("PingPangPlayer learn how to serve and dribble.");
    }
    
    public void speak() {
        System.out.println("PingPangPlayer speak English.");
    }
}

class BasketballPlayer extends Player {
    public BasketballPlayer() {}
    
    public BasketballPlayer(String name, int age) {
        super(name, age);
    }
    
    @Override
    public void eat() {
        System.out.println("BasketballPlayer eat beef and drink milk.");
    }
    
    @Override
    public void study() {
        System.out.println("BasketballPlayer learn how to dribble.");
    }
}

class PingPangCoach extends Coach implements SpeakEnglish {
    public PingPangCoach() {}
    
    public PingPangCoach(String name, int age) {
        super(name, age);
    }
    
    @Override
    public void eat() {
        System.out.println("PingPangCoach eat mill Chinese cabbage and drink eice porridge.");
    }
    
    @Override
    public void teach() {
        System.out.println("PingPangCoach teach how to serve and dribble.");
    }
    
    public void speak() {
        System.out.println("PingPangCoach speak English.");
    }
}

class BasketballCoach extends Player {
    public BasketballCoach() {}
    
    public BasketballCoach(String name, int age) {
        super(name, age);
    }
    
    @Override
    public void eat() {
        System.out.println("BasketballCoach eat mutton and drink goats' milk.");
    }
    
    @Override
    public void study() {
        System.out.println("BasketballCoach teach how to dribble.");
    }
}

public class Test {
    
    public static void main(String[] args) {
        // test palyer
        PingPangPlayer pingPangPlayer = new PingPangPlayer();
        pingPangPlayer.setName("wanghao");
        pingPangPlayer.setAge(33);
        System.out.println(pingPangPlayer.getName()+"-------"+pingPangPlayer.getAge());
        pingPangPlayer.eat();
        pingPangPlayer.sleep();
        pingPangPlayer.study();
    }
}
原文地址:https://www.cnblogs.com/chen-cai/p/9900441.html