1. 需求(转化成用户故事):
想象一下,经常有新闻/视频+留言版这种常见的网页形式,现在我们用控制台(console)来模拟这种网页,在console中,首先2名足球明星、2名篮球明星、1名游泳明星登场,然后明星展示才艺,最后粉丝表达感情。
要求用面向对象的思想来实现这一功能。
2. 思路(转化成backlog)
(1)各位明星都是各领域的运动员,他们都属于运动员,而运动员又是人类,那么我们设计的时候,设计两次继承,人类->运动员->各领域运动员。
(2)不同领域的运动员,他们所从事的项目有其特别性,比如足球篮球以进球为胜负标准,田径一般以时间、长度或高度为胜负标准,因此他们的行为也各不相同,比如足球篮球有射门或投篮的行为,田径运动员有强力冲刺、跳跃的行为,但相似的项目又有类似的行为,因此,我们用接口来模拟这种行为的多样性。
(3) 粉丝继承于人类,他们对喜欢的明星很喜爱,对不喜欢的明星黑得体无完肤。
3. 类的设计(转化成具体的Process)(类图可以手画)
由于时间原因,类的设计较好的体现了继承和多态的思想,但没有很好的体现封装,同学们可以在设计的时候补齐这一块。
代码文件解释:
(1)Person:人类,抽象类
(2)Athlete:运动员类,继承自Person
(3)GoalAthlete:接口,具备得分行为的运动员,体现多态的思想
(4)SportsFan:粉丝类,继承自Person
(5)SoccerAthlete:足球运动员,继承自Athlete,实现GoalAthlete接口
BasketBallAthlete:篮球运动员,继承自Athlete,实现GoalAthlete接口
Swimmer:游泳运动员,继承自Athlete
图注:实线箭头是继承关系,虚线箭头是接口实现,斜体的是抽象对象或抽象方法。
附:代码导入方法:
1. 新建java工程,在src上右键,选择import;
2. 选择File System,选择代码所在的目录,选中左侧的文件夹,确保所有.java文件被选中,点finish。
1.package intermediateDemo_OOP;
public class Athlete extends Person {
private String value;//身价
private String specialTechnique;//特别的技能
public Athlete(String myValue, String mySpecialTechnique,String myName, int myAge, char myGender){
super(myName, myAge, myGender);//显示调用父类的构造函数
value=myValue;
specialTechnique=mySpecialTechnique;
}
@Override
//重写父类的getName方法
public String getName(){
return super.getName();
}
//获取特殊技能
public String getSpecialTechnique(){
return this.specialTechnique;
}
@Override
//重写父类的抽象方法
public void think() {
System.out.println("竞技就是我的灵魂,永远追求更完美的自己!");
}
//问好
public void sayHello(String specialHello){
System.out.println(specialHello);
}
//秀一下
public void showOff(String specialShowOff){
System.out.