Java面向对象思想_接口和抽象类_编写带有接口和抽象类的标准JavaBean类——较难小练习

题目:

我国现有乒乓球运动员和篮球运动员,乒乓球教练和篮球教练。为了出国交流,乒乓球相关人员都需要学习英语。

乒乓球运动员(PingPangPlayer)        属性:姓名,年龄        行为:学打乒乓球,说英语

篮球运动员(BasketballPlayer)          属性:姓名,年龄        行为:学打篮球

乒乓球教练(PingPangCoach)           属性:姓名,年龄        行为:教打乒乓球,说英语

篮球教练(BasketballCoach)              属性:姓名,年龄        行为:教打篮球

首先分析并做出关系图:

分析:可以有两种情况,一,教练继承教练类,运动员继承运动员类,创建说英语接口,乒乓球相关人员执行调用。二,乒乓球相关人员继承乒乓球类,篮球相关人员继承篮球类,创建学和教两个接口,分别是运动员和教练执行调用。综上所述两者继承结构相差不大,但是第一种继承关系只需要创建一个接口,更节省资源,所以我们选择第一种继承结构。

接下来进行画图,画出关系图:

如上图所示

接下来根据关系图从关系图最方开始往编码
Person类:
//因为创建Person对象也没有意义,所以我直接把Person类定义为抽象类
public abstract 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;
    }
}

Player类:
public abstract class Player extends Person {

    public Player() {
    }

    public Player(String name, int age) {
        super(name, age);
    }

    public abstract void study();

}

Coach类:
public abstract class Coach extends Person {

    public Coach() {
    }

    public Coach(String name, int age) {
        super(name, age);
    }

    public abstract void teach();

}

接下来编写接口English:
public interface English {

    public abstract void speakEnglish();

}

继续编写剩余子类:

PingPangPlayer类:

public class PingPangPlayer extends Player implements English {

    public PingPangPlayer() {
    }

    public PingPangPlayer(String name, int age) {
        super(name, age);
    }

    @Override
    public void speakEnglish() {
        System.out.println("乒乓球运动员说英语");
    }

    @Override
    public void study() {
        System.out.println("乒乓球运动员学打乒乓球");
    }
}

BasketballPlayer类:

public class BasketballPlayer extends Player{

    public BasketballPlayer() {
    }

    public BasketballPlayer(String name, int age) {
        super(name, age);
    }

    @Override
    public void study() {
        System.out.println("篮球运动员学打篮球");
    }
}

PingPangCoach类:

public class PingPangCoach extends Coach implements English {

    public PingPangCoach() {
    }

    public PingPangCoach(String name, int age) {
        super(name, age);
    }

    @Override
    public void teach() {
        System.out.println("乒乓球教练教打乒乓球");
    }

    @Override
    public void speakEnglish() {
        System.out.println("乒乓球教练说英语");
    }
}

BasketballCoach类:

public class BasketballCoach extends Coach {

    public BasketballCoach() {
    }

    public BasketballCoach(String name, int age) {
        super(name, age);
    }

    @Override
    public void teach() {
        System.out.println("篮球教练教打篮球");
    }
}

最后编写测试类Test:
public class Test {
    public static void main(String[] args) {
        //创建对象乒乓球运动员
        PingPangPlayer ppp = new PingPangPlayer("龙少", 21);
        ppp.study();
        ppp.speakEnglish();
        System.out.println(ppp.getName() + ", " + ppp.getAge());
        System.out.println("---------------------");

        //创建对象篮球运动员
        BasketballPlayer bp = new BasketballPlayer("小杰", 20);
        bp.study();
        System.out.println(bp.getName() + ", " + bp.getAge());
        System.out.println("---------------------");

        //创建对象乒乓球教练
        PingPangCoach ppc = new PingPangCoach("小胖", 36);
        ppc.teach();
        ppc.speakEnglish();
        System.out.println(ppc.getName() + ", " + ppc.getAge());
        System.out.println("---------------------");

        //创建对象篮球教练
        BasketballCoach bc = new BasketballCoach("大姚", 37);
        bc.teach();
        System.out.println(bc.getName() + ", " + bc.getAge());
        System.out.println("---------------------");
    }
}

运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值