按需求手写封装、继承、多态和接口案例

案例实现步骤

有很多小主资讯,如何手写一个面向对象案例,那么本文就按一个需求案例陈述如何使用封装、继承、多态以及接口实现该功能。

需求

有一个圈子,属于运动圈子。乒乓球运动员张飞、今年25岁、性别男,每天要到体育馆打卡进行锻炼,在锻炼的时候还爱唱歌。而乒乓球教练张继科、今年32岁、性别男,到了体育馆要给乒乓球运动员进行授课,也要考察学员情况。
篮球运动员白峰、今年26岁、性别女,同样他也要在体育馆内进行室内锻炼,在锻炼的时候爱听音乐,锻炼完还要学习文化课课程。而篮球教练姚明、今年35岁、性别男,也要在体育馆内给篮球球运动员进行授课,也要考察学员情况,学员锻炼完后和学员们一起学习文化课课程。

分析

定义一个抽象类:人类Human/Person成员属性有名字、年龄、性别,成员方法就是到达体院馆;
定义一个类运动员类:Player继承人类Human属性,成员方法是在馆内开展锻炼;
定义一个类教练类:Coach继承人类Human属性,成员方法是在馆内开展授课;
定义一个接口:Study,成员方法(抽象)表示学员锻炼完后和学员们一起学习文化课课程;
定义一个乒乓运动员类:PingPong继承Player,成员方法是爱唱歌;
定义一个篮球运动员类:Basketball继承Player,接口实现学习文化课课程,成员方法是爱听音乐;
定义一个乒乓教练类:PingPongCoach继承Coach,成员方法是考察乒乓球运动锻炼情况;
定义一个篮球教练类:BasketballCoach继承Coach,接口实现学习文化课课程,成员方法是考察篮球球运动锻炼情况。

图解

在这里插入图片描述

创建以下java文件

在这里插入图片描述

抽象类_Person

应用private,实现内部封装一些特有的属性,其他类不能随便改变。

//抽象类—Human(Person)
public abstract class Person {

	private String name;      //名字
	private String gander;    //性别
	private int gae;          //年龄
	
	
	public Person() {
	
	}
	public Person(String name, String gander, int gae) {
		this.name = name;
		this.gander = gander;
		this.gae = gae;
	}
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public String getGander() {
		return gander;
	}
	public void setGander(String gander) {
		this.gander = gander;
	}
	
	public int getGae() {
		return gae;
	}
	public void setGae(int gae) {
		this.gae = gae;
	}
	
	public abstract void get();
	
}

运动员类_Player

//运动员类
public class Player extends Person {
	
	public Player() {
		super();
	}
	public Player(String name, String gander, int gae) {
		super(name, gander, gae);
	}

	
	public void get() {
		System.out.println("每天到达体育馆");
	}


	public void  take() {
		System.out.println("在馆内向开展锻炼");
		
	}
	

}

教练类_Coach

//教练类
public class Coach extends Person {

	
	public Coach() {
		super();
	}

	public Coach(String name, String gander, int gae) {
		super(name, gander, gae);
	}
		
	
	public void get() {
		System.out.println("每天到达体育馆");
	}


	public void  talk() {
		System.out.println("在馆内向球员开展授课");
		
	}
	
}

学习类_Study接口

//学习类_接口
interface Study {

	
	public abstract void  cultural();
	
	
}

乒乓球运动员类_PingPong

//乒乓球运动员类
public class PingPong extends Player {


	public PingPong() {
		super();
	}

	public PingPong(String name, String gander, int gae) {
		super(name, gander, gae);
	}

	public void sing() {
		
		System.out.println("练乒乓球,不时的唱一首歌");
	}
	
}

篮球运动员类_Basketball

//篮球运动员类
public class Basketball extends Player implements Study {

	public Basketball() {
		super();
	}

	public Basketball(String name, String gander, int gae) {
		super(name, gander, gae);
	}

	
	public void listen() {
		System.out.println("练篮球,不时的听一首歌");
	}
	
	public  void  cultural(){
		System.out.println("锻炼完还得学习文化课课程");
	}
	
	
}

乒乓球教练类_PingPongCoach

//乒乓球教练类
public class PingPongCoach extends Coach {

	public PingPongCoach() {
		super();
	}

	public PingPongCoach(String name, String gander, int gae) {
		super(name, gander, gae);
	}

	
	public void inspectp() {
		System.out.println("考察乒乓球运动员锻炼情况");
		
	}

}

篮球教练类_BasketballCoach

//篮球教练类
public class BasketballCoach extends Coach implements Study{

	public BasketballCoach() {
		super();
	}

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

	public void inspectb() {
		System.out.println("考察蓝球运动员锻炼情况");
		
	}	
	
	public  void  cultural(){
		System.out.println("传授完还得学习文化课课程");
	}	
	
}

测试类_Test

//测试类
public class Test {

	public static void main(String[] args) {
		System.out.println("*****************");
		//有参+get方法
		Player p = new PingPong("张飞","男",25);
		System.out.println(p.getName()+"---"+p.getGander()+"---"+p.getGae());
		p.get();
		p.take();
		//向下转型
		PingPong m =(PingPong)p;
		m.sing();
		System.out.println("-------------------");
		System.out.println();//空行
		
		Coach p1 = new PingPongCoach("张继科","男",32);
		System.out.println(p1.getName()+"---"+p1.getGander()+"---"+p1.getGae());
		p1.get();
		p1.talk();
		
		PingPongCoach m1 =(PingPongCoach)p1;
		m1.inspectp();
		System.out.println("*****************");
						
		System.out.println();
		System.out.println();
		System.out.println();
	


		System.out.println("*****************");
		//无参+setxxx/getxxx方法
		Player b = new Basketball();
		b.setName("白峰");
		b.setGander("女");
		b.setGae(26);
		System.out.println(b.getName()+"---"+b.getGander()+"---"+b.getGae());
		b.get();
		b.take();

		Basketball c =(Basketball)b;
		c.listen();
		Study s = new Basketball( );
		s.cultural();		
		System.out.println("---------------------");
		System.out.println();
		
		Coach b1 = new BasketballCoach();
		b1.setName("姚明");
		b1.setGander("男");
		b1.setGae(35);
		System.out.println(b1.getName()+"---"+b1.getGander()+"---"+b1.getGae());
		b1.get();
		b1.talk();

		BasketballCoach c1 =(BasketballCoach)b1;
		c1.inspectb();
		Study s1 = new  BasketballCoach();
		s1.cultural();		
		System.out.println("*****************");		

		
	}

}

输出结果

在这里插入图片描述

注意事项

子类继承父类,只能继承父类非私有的成员,被private修饰的成员,外界都不能访问;
子类不能继承父类的构造方法,但是可以通过一个关键字super来访问;
子类的成员不能

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值