一个前端工作者的Java学习打卡
运动员和教练案例
分析一个需求要从具体类到抽象类
实现一个需求要从抽象类到具体类
我们先定义接口和抽象类,再实现对应具体的类
package com.Java21;
/**
* 说英语的接口类
*/
public interface SpkEnglish {
// 说英语的接口方法
public abstract void speak();
}
package com.Java21;
/**
* 抽象的人类
*/
public abstract class Person {
private String name;
private int age;
// 无参和有参构造方法
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// getter setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package com.Java21;
/**
* 抽象的运动员类,继承人类
*/
public abstract class Player extends Person{
// 无参和有参构造
public Player() {
}
public Player(String name, int age) {
super(name, age);
}
// 学的方法
public abstract void study();
// 吃的方法
public abstract void eat();
}
package com.Java21;
/**
* 抽象的教练类,继承人类
*/
public abstract class Coach extends Person {
// 无参和有参构造方法
public Coach() {
}
public Coach(String name, int age) {
super(name, age);
}
// 教的方法
public abstract void teach();
// 吃的方法
public abstract void eat();
}
package com.Java21;
/**
* 乒乓球教练类,继承教练类,实现说英语的接口
*/
public class PingPangCoach extends Coach implements SpkEnglish{
// 无参和有参
public PingPangCoach() {
}
public PingPangCoach(String name, int age) {
super(name, age);
}
// 重写教和吃两个方法
@Override
public void teach() {
System.out.println("我是教乒乓球的");
}
@Override
public void eat() {
System.out.println("乒乓球教练吃乒乓球");
}
// 重写说英语的方法
@Override
public void speak() {
System.out.println("乒乓球教练说英语");
}
}
package com.Java21;
/**
* 具体的乒乓球运动员类,继承抽象的运动员类,实现说英语的接口
*/
public class PingPangPlay extends Player implements SpkEnglish{
// 无参和有参
public PingPangPlay() {
}
public PingPangPlay(String name, int age) {
super(name, age);
}
// 重写学习和吃两个方法
@Override
public void study() {
System.out.println("打乒乓球的学习打乒乓球");
}
@Override
public void eat() {
System.out.println("打乒乓球的吃乒乓球");
}
// 重写说英语的方法
@Override
public void speak() {
System.out.println("打乒乓球的说英语");
}
}
package com.Java21;
/**
* 具体的篮球教练类,继承教练类
*/
public class BasketballCoach extends Coach {
// 无参和有参
public BasketballCoach() {
}
public BasketballCoach(String name, int age) {
super(name, age);
}
// 重写教和吃两个方法
@Override
public void teach() {
System.out.println("我是教篮球的");
}
@Override
public void eat() {
System.out.println("篮球教练吃篮球");
}
}
package com.Java21;
/**
* 具体的运动员类,继承抽象的运动员类
*/
public class BasketballPlay extends Player {
// 无参和有参
public BasketballPlay() {
}
public BasketballPlay(String name, int age) {
super(name, age);
}
// 重写学习和吃两个方法
@Override
public void study() {
System.out.println("打篮球的学习怎么打篮球");
}
@Override
public void eat() {
System.out.println("打篮球的吃篮球");
}
}
package com.Java21;
/**
* 测试类
*/
public class JavaDemo21 {
public static void main(String[] args) {
// 创建乒乓球运动员对象
PingPangPlay ppp = new PingPangPlay();
ppp.setName("张继科");
ppp.setAge(30);
System.out.println(ppp.getName() + ppp.getAge());
ppp.eat();
ppp.speak();
ppp.study();
System.out.println("------------------");
// 创建篮球运动员对象
BasketballPlay BP = new BasketballPlay();
BP.setName("姚明");
BP.setAge(20);
System.out.println(BP.getName() + BP.getAge());
BP.eat();
BP.study();
System.out.println("------------------");
// 创建篮球教练对象
BasketballCoach BC = new BasketballCoach();
BC.setName("姚明的篮球教练");
BC.setAge(40);
System.out.println(BC.getName() + BC.getAge());
BC.eat();
BC.teach();
System.out.println("-------------------");
// 创建乒乓球教练对象
PingPangCoach ppc = new PingPangCoach();
ppc.setName("张继科的乒乓球教练");
ppc.setAge(50);
System.out.println(ppc.getName() + ppc.getAge());
ppc.eat();
ppc.speak();
ppc.teach();
}
}
工作原因,每天一小时,坚持
|