错误设计!
思路一:
思路二:
//因为现在我不想让外界直接去创建人的对象
//因为直接创建顶层父类人的对象此时是没有意义的
//所以就把他写成抽象的
public abstract class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
}
public abstract class Sporter extends Person{
public Sporter() {
}
public Sporter(String name, int age) {
super(name, age);
}
//因为篮球运动员和乒乓球运动员学习的不一样所以用抽象方法
public abstract void study();//抽象方法所在的类必须是抽象类
}
public abstract class Coach extends Person{
public Coach() {
}
public Coach(String name, int age) {
super(name, age);
}
//同理 教的东西不一样所以是抽象的
public abstract void teach();//抽象方法所在的类必须是抽象类
}
public interface English {
public abstract void speakEnglish();
}
public class PingPangSporter extends Sporter implements English{
public PingPangSporter() {
}
public PingPangSporter(String name, int age) {
super(name, age);
}
@Override
public void speakEnglish() {
System.out.println("说英语");
}
@Override
public void study() {
System.out.println("学乒乓球");
}
}
public class BasketballSporter extends Sporter{
public BasketballSporter() {
}
public BasketballSporter(String name, int age) {
super(name, age);
}
@Override
public void study() {
System.out.println("学打篮球两年半");
}
}
public class PingPangCoach extends Coach implements English{
public PingPangCoach() {
}
public PingPangCoach(String name, int age) {
super(name, age);
}
@Override
public void teach() {
System.out.println("教乒乓球");
}
@Override
public void speakEnglish() {
System.out.println("说英语");
}
}
public class BasketballCoach extends Coach{
public BasketballCoach() {
}
public BasketballCoach(String name, int age) {
super(name, age);
}
@Override
public void teach() {
System.out.println("教打篮球一坤年");
}
}
public class Test {
public static void main(String[] args) {
//创建运动员或者教练的对象
BasketballSporter bs = new BasketballSporter("张三", 21);
System.out.println(bs.getName() + "," + bs.getAge());
bs.study();
BasketballCoach bc = new BasketballCoach("李四", 30);
System.out.println(bc.getName() + "," + bc.getAge());
bc.teach();
PingPangSporter pps = new PingPangSporter("王五",19);
System.out.println(pps.getName() + "," + pps.getAge());
pps.study();
pps.speakEnglish();
}
}
运行结果: