interface Vehicle {
void displayDetails( ) ;
double calculateRent( int days) ;
}
interface ExtraFeature {
void showFeature( ) ;
}
class Car implements Vehicle, ExtraFeature {
public void displayDetails( ) {
System .
out .
println ( "Vehicle: Car" ) ; System .
out .
println ( "Rent per day: 2000 Tk" ) ; }
public double calculateRent( int days) {
return days * 2000 ;
}
public void showFeature( ) {
System .
out .
println ( "Feature: Air Conditioning Available" ) ; }
}
class Bike implements Vehicle, ExtraFeature {
public void displayDetails( ) {
System .
out .
println ( "Vehicle: Bike" ) ; System .
out .
println ( "Rent per day: 800 Tk" ) ; }
public double calculateRent( int days) {
return days * 800 ;
}
public void showFeature( ) {
System .
out .
println ( "Feature: Helmet Available" ) ; }
}
class RentalManager {
Vehicle processVehicle( Vehicle vehicle) {
return vehicle;
}
}
public class Main {
public static void main
( String [ ] args
) { RentalManager manager = new RentalManager( ) ;
Vehicle v1 = manager.processVehicle ( new Car( ) ) ;
Vehicle v2 = manager.processVehicle ( new Bike( ) ) ;
v1.displayDetails ( ) ;
System .
out .
println ( "Total Rent: " + v1.
calculateRent ( 3 ) + " Tk" ) ; ( ( ExtraFeature) v1) .showFeature ( ) ;
v2.displayDetails ( ) ;
System .
out .
println ( "Total Rent: " + v2.
calculateRent ( 3 ) + " Tk" ) ; ( ( ExtraFeature) v2) .showFeature ( ) ;
}
}
CmludGVyZmFjZSBWZWhpY2xlIHsKICAgIHZvaWQgZGlzcGxheURldGFpbHMoKTsKICAgIGRvdWJsZSBjYWxjdWxhdGVSZW50KGludCBkYXlzKTsKfQoKaW50ZXJmYWNlIEV4dHJhRmVhdHVyZSB7CiAgICB2b2lkIHNob3dGZWF0dXJlKCk7Cn0KCmNsYXNzIENhciBpbXBsZW1lbnRzIFZlaGljbGUsIEV4dHJhRmVhdHVyZSB7CiAgICBwdWJsaWMgdm9pZCBkaXNwbGF5RGV0YWlscygpIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlZlaGljbGU6IENhciIpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVudCBwZXIgZGF5OiAyMDAwIFRrIik7CiAgICB9CgogICAgcHVibGljIGRvdWJsZSBjYWxjdWxhdGVSZW50KGludCBkYXlzKSB7CiAgICAgICAgcmV0dXJuIGRheXMgKiAyMDAwOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIHNob3dGZWF0dXJlKCkgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmVhdHVyZTogQWlyIENvbmRpdGlvbmluZyBBdmFpbGFibGUiKTsKICAgIH0KfQoKY2xhc3MgQmlrZSBpbXBsZW1lbnRzIFZlaGljbGUsIEV4dHJhRmVhdHVyZSB7CiAgICBwdWJsaWMgdm9pZCBkaXNwbGF5RGV0YWlscygpIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlZlaGljbGU6IEJpa2UiKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlbnQgcGVyIGRheTogODAwIFRrIik7CiAgICB9CgogICAgcHVibGljIGRvdWJsZSBjYWxjdWxhdGVSZW50KGludCBkYXlzKSB7CiAgICAgICAgcmV0dXJuIGRheXMgKiA4MDA7CiAgICB9CgogICAgcHVibGljIHZvaWQgc2hvd0ZlYXR1cmUoKSB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGZWF0dXJlOiBIZWxtZXQgQXZhaWxhYmxlIik7CiAgICB9Cn0KCmNsYXNzIFJlbnRhbE1hbmFnZXIgewogICAgVmVoaWNsZSBwcm9jZXNzVmVoaWNsZShWZWhpY2xlIHZlaGljbGUpIHsKICAgICAgICByZXR1cm4gdmVoaWNsZTsKICAgIH0KfQoKcHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIFJlbnRhbE1hbmFnZXIgbWFuYWdlciA9IG5ldyBSZW50YWxNYW5hZ2VyKCk7CgogICAgICAgIFZlaGljbGUgdjEgPSBtYW5hZ2VyLnByb2Nlc3NWZWhpY2xlKG5ldyBDYXIoKSk7CiAgICAgICAgVmVoaWNsZSB2MiA9IG1hbmFnZXIucHJvY2Vzc1ZlaGljbGUobmV3IEJpa2UoKSk7CgogICAgICAgIHYxLmRpc3BsYXlEZXRhaWxzKCk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBSZW50OiAiICsgdjEuY2FsY3VsYXRlUmVudCgzKSArICIgVGsiKTsKICAgICAgICAoKEV4dHJhRmVhdHVyZSkgdjEpLnNob3dGZWF0dXJlKCk7CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwoKICAgICAgICB2Mi5kaXNwbGF5RGV0YWlscygpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgUmVudDogIiArIHYyLmNhbGN1bGF0ZVJlbnQoMykgKyAiIFRrIik7CiAgICAgICAgKChFeHRyYUZlYXR1cmUpIHYyKS5zaG93RmVhdHVyZSgpOwogICAgfQp9Cg==