Multiple inheritance allows to specify that one  class is a subclass of several other classes.

Some languages allow multiple inheritance for arbitrary classes,   others restrict it to interfaces,   some don't allow it at all.



Task

Write two classes (or interfaces) Camera and MobilePhone,   then write a class CameraPhone which is both a Camera and a MobilePhone.

There is no need to implement any functions for those classes.




 
Module CheckIt {
      Class Camera {
      Private:
            cameratype$
      Class:            
            module Camera (.cameratype$){
            }
      }
      \\ INHERITANCE AT CODE LEVEL
      Class MobilePhone {
      Private:
            model$
       Class:
            module  MobilePhone (.model$) {
            }
      }
      Class CameraPhone  as Camera as MobilePhone {
            Module CameraPhone ( .model$, .cameratype$) {
            }
      }
      CP1 =CameraPhone("X-15", "OBSCURE")
      Print CP1 is type CameraPhone = true
      Print CP1 is type Camera = true
      Print CP1 is type MobilePhone = true
 
      \\ INHERITANCE AT OBJECT LEVEL
      CP2 = MobilePhone("X-9") with Camera("WIDE")
      \\ CP3 has no type
      Group CP3 {
             Module PrintAll {
                   If this is type Camera and this is type MobilePhone then
                         Print .model$, .cameratype$
                   Else
                         Print "Nothing to print"
                   End if
             }
      }
      CP3.PrintAll   ' Nothing to print
      \\ using pointers and prepate inheritance at object level
      CP->(CP1 with CP3)
      CP=>PrintAll
      CP->(CP2 with CP3)
      CP=>PrintAll      
}
CheckIt
 