接口讲解入口
编写带有接口和抽象类的标准Javabean类
我们现在有乒乓球运动员和篮球运动员,乒乓球教练和篮球教练。
为了出国交流,跟乒乓球相关的人员都需要学习英语
请用所有知识分析,在这个案例中,那哪些是具体类,哪些是抽象类,哪些是接口
乒乓球运动员:姓名,年龄,学打乒乓球,说英语
篮球运动员:姓名,年龄,学打篮球
乒乓球教练:姓名,年龄,教打乒乓球,说英语
篮球教练:姓名,年龄,教打篮球
首先可以确定,子类分别是乒乓球运动员,篮球运动员,乒乓球教练,篮球教练
**思路一:按照运动进行分类。**将乒乓球相关的运动员和教练放到一个父类,把姓名,年龄,学英语放到这个父类中;将篮球相关的运动员和教练放到一个父类,把姓名,年龄放到这个父类中。然后将这两个父类抽取公共的属性姓名,年龄,放到更高层的父类Person中。用两个接口分别代表学和教,运动员实现接口学,教练实现接口教。
思路一中具体类是乒乓球运动员、乒乓球教练、篮球运动员、篮球教练、篮球从业者、乒乓球从业者。接口是学和教
**思路二:按照职业进行分类。**将运动员们放到一个父类,把姓名,年龄,学运动放到这个父类中;将教练们放到一个父类,把姓名,年龄,教运动放到这个父类中。然后将这两个父类抽取公共的属性姓名,年龄,放到更高层的父类Person中。用一个借口表示学英语,乒乓球运动员和乒乓球教练实现学英语的接口
思路二中具体类就是乒乓球运动员,篮球运动员,篮球教练,乒乓球教练,接口就是学英语,抽象类就是运动员和教练
根据这两种思路的结构图不难看出,思路二更加简洁,所以以下就用思路二进行代码实现
第一步
依据从上向下的顺序,首先应该创建最高级父类Person。在父类Person中应该有成员变量姓名、年龄,还要有对应的构造方法以及方法
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;}
}
Person类设为抽象类是因为不想让外界直接创建Person类,直接创建顶层父类是没有意义的
第二步
创建完父类Person后,接着创建它的子类Sporter和Coach,在Sporter类和Coach类中首先要有父类中的成员变量的构造方法,还要在Sporter类中有抽象方法的learn,在Coach类中有抽象方法teach。因此Sporter类和Coach类是抽象类
//Sporter类
public abstract class Sporter extends Person{public Sporter() {}public Sporter(String name, int age) {super(name, age);}public abstract void learn();
}
//Coach类
public abstract class Coach extends Person{public Coach() {}public Coach(String name, int age) {super(name, age);}public abstract void teach();
}
第三步
接着,需要创建接口English,在接口中写明抽象方法
public interface English {public abstract void speakEnglish();
}
第四步
创建Sporter类的子类PingPongSporter类和BasketballSporter类,并且完成相关的功能
//PingPongSporter类
public class PingPongSporter extends Sporter implements English{public PingPongSporter() {}public PingPongSporter(String name, int age) {super(name, age);}@Overridepublic void speakEnglish() {System.out.println("乒乓球运动员学英语");}@Overridepublic void learn() {System.out.println("乒乓球运动员学打乒乓球");}
}
//BasketballSporter类
public class BasketballSporter extends Sporter {public BasketballSporter() {}public BasketballSporter(String name, int age) {super(name, age);}@Overridepublic void learn() {System.out.println("篮球运动员学打篮球");}}
因为PingPongSporter类需要实现English接口,因此需要重写English接口里面的抽象方法。
第五步
创建Coach类的子类PingPongCoach类和BasketballCoachr类,并且完成相关的功能
//PingPongCoach类
public class PingPongCoach extends Coach implements English{public PingPongCoach() {}public PingPongCoach(String name, int age) {super(name, age);}@Overridepublic void teach() {System.out.println("乒乓球教练在教打乒乓球");}@Overridepublic void speakEnglish() {System.out.println("乒乓球教练在学英语");}
}
//BasketballCoach类
public class BasketballCoach extends Coach{public BasketballCoach() {}public BasketballCoach(String name, int age) {super(name, age);}@Overridepublic void teach() {System.out.println("篮球教练在教打篮球");}
}
因为PingPongCoach类需要实现English接口,因此需要重写English接口里面的抽象方法。
第六步
编写Test类,实现相应的输出
public class Teat {public static void main(String[] args) {PingPongSporter pps = new PingPongSporter("ppa", 23);System.out.Name() + " " + Age());pps.learn();pps.speakEnglish();PingPongCoach ppc=new PingPongCoach("ppc",40);System.out.Name()+" "Age());ach();ppc.speakEnglish();BasketballSporter bs=new BasketballSporter("bs",24);System.out.Name()+" "Age());bs.learn();BasketballCoach bc=new BasketballCoach("bc",42);System.out.Name()+" "Age());bc.teach();}
}
最终结果
本文发布于:2024-02-01 07:25:41,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170674354134874.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |