首先顺丰,EMS,圆通都是快递公司,他们都有一个共同的属性,就是快递公司名字,因此抽象出一个共同的父类叫ExpressDelivery;
另外,空运和陆运都是一种行为,是不同的两种行为,因此定义两个接口来记录这两种行为。顺丰即可陆运,也可空运,因此两种接口都继承;EMS只能空运,因此只继承空运的接口,圆通只能发陆运,因此只继承陆运的接口。
public class work05 {
public static void main(String[] args) {
//1.实例化一个人对象
Person xiaoming=new Person("xiaoming");
//2.实例化顺丰对象
SF sf=new SF();
//实例化圆通对象
YTO yto=new YTO();
//实例化EMS对象
EMS ems=new EMS();
//空运用顺丰
xiaoming.sendByAirTransportation(sf);
//陆运用顺丰
xiaoming.sendByLandTransportation(sf);
//空运用EMS
xiaoming.sendByAirTransportation(ems);
//陆运用圆通
xiaoming.sendByLandTransportation(yto);
}
}
class Person{
String name;
public Person() {
}
public Person(String name) {
this.name = name;
}
//定义空运方法
public void sendByAirTransportation(AirTransport airTransport){
show();
airTransport.AirTransportation();
}
//定义陆运方法
public void sendByLandTransportation(LandTransport landTransport){
show();
landTransport.LandTransportation();
}
public String getName() {
return name;
}
public void show(){
System.out.print(toString());
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
'}';
}
}
//圆通陆运
class YTO extends ExpressDelivery implements LandTransport{
public YTO(){
this.setName("圆通");
}
@Override
public void LandTransportation() {
System.out.println(this.getName()+"陆运");
}
}
//EMS 空运
class EMS extends ExpressDelivery implements AirTransport{
public EMS(){
this.setName("EMS");
} @Override
public void AirTransportation() {
System.out.println(this.getName()+"空运");
}
}
//顺丰既可以空运也可以陆运
class SF extends ExpressDelivery implements AirTransport,LandTransport{
public SF(){
this.setName("顺丰");
} @Override
public void AirTransportation() {
System.out.println(this.getName()+"空运");
}
@Override
public void LandTransportation() {
System.out.println(this.getName()+"陆运");
}
}
//定义空运接口
interface AirTransport {
//定义空运方法
void AirTransportation();
}
//定义陆运接口
interface LandTransport{
//定义陆运方法
void LandTransportation();
}
class ExpressDelivery {
//定义快递名称
String name;
//无参构造
public ExpressDelivery() {
}
//带一个参数的构造方法
public ExpressDelivery(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "ExpressDelivery{" +
"name='" + name + '\'' +
'}';
}
}