-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
第五讲 案例
教练和运动员案例
要求 :三个属性
构造方法
get()/set()
其他成员方法 至少两个
针对这个问题,我们首先要想到的是继承、多态、抽象、接口的使用方法,前面我已经说到了这几种类型的使用方法,下面我就先来好好分析下这个例题。
分析:
1、教练和运动员都属于人类,共有属性(姓名,年龄,性别)
2、乒乓球教练和篮球教练都属于教练类(他们的方法都是教,教的东西不一样)
3、运动员同理(学习的方法不一样)
4、运动员还有打球的扩展功能
5、都有eat(),sleep()
其关系图如图所示:
package abstracttest;
/*
教练和运动员案例
要求 : 三个属性
构造方法
get()/set()
其他成员方法 至少两个
分析:
1、教练和运动员都属于人类,共有属性(姓名,年龄,性别)
2、乒乓球教练和篮球教练都属于教练类(他们的方法都是教,教的东西不一样)
3、运动员同理(学习的方法不一样)
4、运动员还有打球的扩展功能
5、都有eat(),sleep()
*/
public class PersonTest3{
public static void main(String[] args){//程序入口
Coach p = new BasketBallCoach("张三",35,"男教练,教篮球的");//多态
//方法调用
p.show();
p.teach();
p.eat();
p.sleep();
System.out.println("-----------------------");
TableCoach p1 = new TableCoach("李四",30,"女教练,教乒乓球的");
//方法调用
p1.show();
p1.teach();
p1.eat();
p1.sleep();
System.out.println("-----------------------");
Person p2 = new BasketBallStudent();
BasketBallStudent p3 = (BasketBallStudent)p2;//这里进行了强转
p3 = new BasketBallStudent("王强",20,"男运动员,学篮球的");
//方法调用
p3.show();
p3.study();
p3.eat();
p3.sleep();
p3.jump();
p3.delicacy();
System.out.println("-----------------------");
Athlete p4 = new TableStudent();
TableStudent p5 = (TableStudent)p4;//这里进行了强转
p5 = new TableStudent("李彦宏",18,"女运动员,学乒乓球的");
//方法调用
p5.show();
p5.study();
p5.eat();
p5.sleep();
p5.jump();
p5.delicacy();
}
}
//人类属于抽象类
abstract class Person{
// 成员变量
private String name;//姓名
private int age;//年龄
private String sex;//性别
//构造方法
Person(){}//无参构造
Person(String name,int age,String sex){//有参构造
this.name = name;
this.age = age;
this.sex = sex;
}
// 成员方法
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
public void setSex(String sex){
this.sex = sex;
}
public String getSex(){
return this.sex;
}
public abstract void eat();
public abstract void sleep();
public void show(){
System.out.println("我的名字叫:"+name+",我今年"+age+"岁了,我是"+sex);
}
}
//教练抽象类继承人类
abstract class Coach extends Person{
//构造方法
Coach(){}
Coach(String name,int age,String sex){
super(name,age,sex);
}
// 成员方法
public abstract void teach();
public void eat(){
System.out.println("我喜欢大鱼大肉......");
}
public void sleep(){
System.out.println("我喜欢睡大觉......");
}
}
//运动员抽象类继承人类
abstract class Athlete extends Person{
//构造方法
Athlete(){}
Athlete(String name,int age,String sex){
super(name,age,sex);
}
// 成员方法
public abstract void study();
public void eat(){
System.out.println("我喜欢吃快餐......");
}
public void sleep(){
System.out.println("我喜欢早起跑步......");
}
}
//篮球教练教的方法,继承教练类
class BasketBallCoach extends Coach{
//构造方法
BasketBallCoach(){}
BasketBallCoach(String name,int age,String sex){
super(name,age,sex);
}
// 成员方法
public void teach(){
System.out.println("赶紧传球...回防......");
}
}
//乒乓球教练教的方法,继承教练类
class TableCoach extends Coach{
//构造方法
TableCoach(){}
TableCoach(String name,int age,String sex){
super(name,age,sex);
}
// 成员方法
public void teach(){
System.out.println("赶紧训练......");
}
}
//运动员的扩展功能,接口
interface SuDu{
public abstract void jump();
public abstract void delicacy();
}
//篮球运动员继承运动员类,并且实现了接口功能
class BasketBallStudent extends Athlete implements SuDu{
//构造方法
BasketBallStudent(){}
BasketBallStudent(String name,int age,String sex){
super(name,age,sex);
}
// 成员方法
public void study(){
System.out.println("老师说了,赢了就有机会加入国家队......");
}
public void jump(){
System.out.println("我们要多参加跳高运动......");
}
public void delicacy(){
System.out.println("我们要多多加快灵敏度......");
}
}
//乒乓球运动员继承运动员类,并且实现了接口功能
class TableStudent extends Athlete implements SuDu{
//构造方法
TableStudent(){}
TableStudent(String name,int age,String sex){
super(name,age,sex);
}
// 成员方法
public void study(){
System.out.println("我们是要去美国拿冠军的......");
}
public void jump(){
System.out.println("我们要多参加跳高运动......");
}
public void delicacy(){
System.out.println("我们要多多加快灵敏度......");
}
}
运行结果为:
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------