手写封装、继承、多态和接口并实现案例
案例实现步骤
有很多小主资讯,如何手写一个面向对象案例,那么本文就按一个需求案例陈述如何使用封装、继承、多态以及接口实现该功能。
需求
有一个圈子,属于运动圈子。乒乓球运动员张飞、今年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来访问;
子类的成员不能