This is achieved in languages ββwhere there are traits (here: scala ):
class Foo { def fooM() {} } trait A { def aFunc() {} } trait B { def bFunc() {} } class Bar extends Foo with A {} class Baz extends Foo with B {} class Qux extends Foo with A with B {}
Since Scala runs on top of Java (it has neither multiple inheritance nor features), it converts to something similar (simplified) - this may be a hint on how to implement it in Java / C # manually:
class Foo { } interface A { void aFunc(); } interface B { void bFunc(); } class Bar extends Foo implements A { public void aFunc() { $A.aFunc(); } } class Baz extends Foo implements B { public void bFunc() { $B.bFunc(); } } class Qux extends Foo implements A, B { public void aFunc() { $A.aFunc(); } public void bFunc() { $B.bFunc(); } } class $A { public static void aFunc() {} } class $B { public static void bFunc() {} }
source share