首先顺丰,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);//空运用EMSxiaoming.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;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +'}';}
}
//圆通陆运
class YTO extends ExpressDelivery implements LandTransport{public YTO(){this.setName("圆通");}@Overridepublic void LandTransportation() {System.out.println(this.getName()+"陆运");}
}
//EMS 空运
class EMS extends ExpressDelivery implements AirTransport{public EMS(){this.setName("EMS");} @Overridepublic void AirTransportation() {System.out.println(this.getName()+"空运");}
}
//顺丰既可以空运也可以陆运
class SF extends ExpressDelivery implements AirTransport,LandTransport{public SF(){this.setName("顺丰");} @Overridepublic void AirTransportation() {System.out.println(this.getName()+"空运");}@Overridepublic 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;}@Overridepublic String toString() {return "ExpressDelivery{" +"name='" + name + '\'' +'}';}
}