黑马程序员——Java基础--继承、多态、抽象、接口联合使用的案例

-----------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学习型技术博客、期待与您交流!------------

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值