Multiple Inheritance problem persists in Interfaces

Hi,
I tentatively made a program and found that multiple inheritance problem of C++ persists even with interfaces. Although this is definetely a special case but I want to know what is this problem known as( i know that this is perhaps known as diamond problem in C++). And is there a way out of this thing.
interface one
     int i=10;
interface two
     int i=20;
interface z extends one,two
public class xyz implements z
     public static void main(String [] a)
     System.out.println(i);
}O/P
D:\Education\Java\JavaStudyRoom\Applets>javac xyz.java
xyz.java:16: reference to i is ambiguous, both variable i in one and variable i
in two match
System.out.println(i);
*^*
*1 error*
Thanks for replying

suvojit168 wrote:
I tentatively made a program and found that multiple inheritance problem of C++ persists even with interfaces. Although this is definetely a special case but I want to know what is this problem known as( i know that this is perhaps known as diamond problem in C++). And is there a way out of this thing. This is not the so called diamond inheritance problem. What you have here is an ordinary name clash. And as has been noted you can resolve it by qualifying which constant you're referring to, like
System.out.println(one.i);
For the diamond inheritance problem to apply both the one and the two interfaces would need to inherit a common ancestor (that's how the diamond is formed). Furthermore the common anscestor would need to carry implementation which would then be inherited two ways, once via one and once via two. This is the diamond inheritance problem Java is avoiding by allowing single inheritance of implementation only.
P.S. My previous post was posted my mistake.

Similar Messages

  • No multiple inheritance in Java. Interfaces used.

    Hi,
    In java a class can extend only one class while the interface can extend any number of interfaces.
    Class extending only one class avoids multiple inheritance.
    Can you explain me the reason of avoiding this in classes and allowing interfaces to extend any number of interfaces ?

    Hi,
    In java a class can extend only one class while the
    interface can extend any number of interfaces.
    Class extending only one class avoids multiple
    inheritance.
    Can you explain me the reason of avoiding this in
    classes and allowing interfaces to extend any number
    of interfaces ?The real question is: do you have a need for multiple inheritance?
    If so, I would be glad to hear about this concrete problem.

  • Is there (REAL) multiple inheritance ?

    Hi brothers,
    how r u..
    let us discuss about one property of java, what do you think ..
    The ability of multiple inheritance is one famous property of java, and that is done by interface, but I think that is not multiple inheritance really in contrast with C++ especially about inheriting of methods.
    If a class M implements interface I and class C, M or its subclasses must implement all methods of I, i.e., the bodies of those methods are made in in M class; then where is the multiple inheritance or even the linear inheritance?
    Is the multiple inheritance for methods prototypes only?
    I[b] suggest that you put those methods in M class directly instead than putting them indirectly.
    C++ provides real multiple inhritance for all members.
    May be if the interface contains constants, we can see multiple inheritance clearly, OR :
    in use APIs, but I dont have much experince in APIs?
    What do you think in what I said?

    Hi brothers,Hi :)
    how r u..fine thanks, and you?
    let us discuss about one property of java, what do
    you think ..I'll do my best :$
    If a class M implements interface I and class C, M or
    its subclasses must implement all methods of I, i.e.,
    the bodies of those methods are made in in M class;
    then where is the multiple inheritance or even the
    linear inheritance?
    Is the multiple inheritance for methods prototypes
    only?Inheritance is there to make your code more understandable I guess.
    An Interface is there to define what the object is about. Persoanally I always felt that true inheritance in java is done when using the 'extends' word rather then the 'implements' keyword. When extending a class you no longer have to declare that method in your class or subclass (unless it is an abstract class).
    I am not a genious in Java, however I always felt that an interface is there to specify the type of the object.
    I suggest that you put those methods in M class
    directly instead than putting them indirectly.But then your set of classes would not longer be understandable, and your objects can no longer have logical meaning. For example imagine haveing an class called 'John' I would never want to have all the methods and properties that describe 'John' to be lofically named only in 'John'! I would want an interface that describes to me that John needs to have two legs and two arms. An other interface that describes to me that John can walk, run, sit, etc, and another interface that tells me that John has a name, surname, id number and so on.
    C++ provides real multiple inhritance for all
    members.Then I guess C++ is the language for you ;)
    May be if the interface contains constants, we can
    see multiple inheritance clearly, OR :An interface can contain constants as much as I know!
    What do you think in what I said?was gona ask the same thing, but now I am afraid I wrote a bunch of sh*t :$ :(

  • Interfaces instead of multiple inheritance?

    I've read that "The Java programming language does not permit multiple inheritance , but interfaces provide an alternative."
    But I also read contradictory information-There are no method bodies in an interface.
    Java interfaces only contain empty methods? Apparently, if I want to share a method among classes, I have to re-write the methods in each class that implements the interface. That doesn't seem at all like multiple inheritance. Am I missing something?
    It seems that I will have to cut and paste the implementation code from one class to another, and if I change the methods, I have to cut and paste it all over again.
    I've read that interfaces save a lot of time re-writing methods, but how?
    Does this really provide the same capabilities as multiple inheritance, or am I missing something?
    Thanks,
    Pat

    Pat-2112 wrote:
    I've read that "The Java programming language does not permit multiple inheritance , but interfaces provide an alternative."
    But I also read contradictory information-There are no method bodies in an interface. That's not contradictory.
    Inheritance is about type, which interfaces provide. It is NOT about sharing code, which is all that's lacking by not having multiple inheritance of implementation.
    Java interfaces only contain empty methods? Apparently, if I want to share a method among classes, I have to re-write the methods in each class that implements the interface. That doesn't seem at all like multiple inheritance. Am I missing something? Yup. You're missing the point of inheritance, and the fact that delegation allows you to use an implementation defined in one class in another class.
    It seems that I will have to cut and paste the implementation code from one class to another, Nope.
    public interface Cowboy {
      void ride();
      void draw();
    public interface Artist {
      void sculpt();
      void draw();
    public interface CowboyArtist extends Cowboy, Artist {
    public class CowboyImpl implements Cowboy {
      public void ride() {
       System.out.println("Giddyup!");
      public void draw() {
        S.o.p("Bang!");
    public class ArtistImpl implements Artist {
      public void sculpt() {
        S.o.p("Demi Moore in Ghost. Yum!");
      public void draw() {
        S.o.p("Sketch a picture of a gun.");
    public class CowboyArtistImpl implements CowboyArtist { // or implements Cowboy, Artist
      private final Cowboy cowboy = new CowboyImpl();
      private final Artist artist = new AristImpl();
      public void ride() {
        cowboy.ride();
      public void sculpt() {
        artist.sculpt();
      public void draw() { // uh-oh, what do we do here?
        artist.draw();
        cowboy.draw();
    }The draw method is not relevant to this particular question. It's an example of one of the problems with MI, and I just included it since it usually comes up int these discussions anyway. Ride and sculpt demonstrate the point about delegation.

  • Error message when opening Outlook: The operation failed. The messaging interfaces have returned an unknown error. If the problem persists, restart Outlook.

    In an Exchange 2010 server/Outlook 2013 environment, one of our users is getting an error message every time they start Outlook. The error message says: "The operation failed. The messaging interfaces have returned an unknown error. If the problem
    persists, restart Outlook."
    The error log message details are as follow:
    System
    Provider
    [ Name]
    Microsoft Office 15 Alerts
    EventID
    300
    [ Qualifiers]
    0
    Level
    4
    Task
    0
    Keywords
    0x80000000000000
    TimeCreated
    [ SystemTime]
    2013-01-08T15:54:49.000000000Z
    EventRecordID
    655
    Channel
    OAlerts
    Computer
    Computer-Name.domain.local
    Security
    EventData
    Microsoft Outlook
    The operation failed. The messaging interfaces have returned an unknown error. If the problem persists, restart Outlook.
    301670
    15.0.4420.1017
    xyfc
    0x8004011B
    The system is as follows:
    Size of .pst file: 2.3 GB (Unicode format so there should be plenty of space left)
    OS: Windows 7 (64-Bit)
    Application: Outlook 2013 (32-Bit)
    The user upgraded from Outlook 2010 a few months ago and the error message has only recently started appearing on startup. I thought it was a corrupt mail profile, so I have already tried creating a new mail profile, as well as the repairing tool in Outlook.
    I even tested another email account and that worked just fine. So apparently it is something wrong with the specific user's account/profile and not something wrong with the computer - since my email account worked fine on his computer.
    Any help would be greatly appreciated.

    I had the same error message, only in my situation Outlook would only open successfully every 4 or 5 attempts. When Outlook would open (versus just hanging at the splash screen), I would get two dialog boxes with the warning/error message. 
    After I clicked okay I could get into Outlook.
    Previously I experienced this problem running my Office 2010 client with my Exchange 2007 mailbox on my old laptop.  The problem followed my mailbox through an Exchange 2010 migration (so new Exchange org), client upgrade to Outlook 2013, and a new
    laptop (so I knew it wasn't a corrupt profile).  This led me to the conclusion that it was a corrupt item(s) in my mailbox.
    To resolve the issue, I archived *everything* in my mailbox to a PST file, ran SCANPST to fix the corruption, and then uploaded everything back into my Exchange mailbox one folder at a time, stopping after each folder to close and restart Outlook so I could
    narrow down which folder had the corrupt item if the problem recurred.  I'm happy to say my issue is now resolved.

  • Problems of no multiple inheritance.

    I have created two classes RECTANGLE with attributes Length and Height and PLANERECTANGLE, with various attributes required to specify the rectangle's center, an attribute that can be checked to see if it is inside an instance of rectangele. However, i am finding this following requirement difficult to understand.
         In Question 5, we specified PlaneRectangle as a subclass of Rectangle. Suppose that we wanted the following generic behaviour to be implemented in a number of different �kinds of� shapes: being able to move a shape, check if a point is inside a shape, and check if another shape lies completely inside a specified instance of some shape. Java will not let us do this using multiple inheritance. How else could we specify this? Rewrite the Java code to illustrate use of this different method.
    Thanks - Mark Costello.

    The answer would be an interface
    public interface Shape
    public void moveShape();
    public boolean containsPoint(int x, int y);
    public boolean containsShape(Shape s);
    Every shape class would then implement this interface:
    public class Circle implements Shape
    ... and would need to implement those methods that
    were specified (but not implemented) in the interface.

  • How java support multiple inheritance by the use of interface.

    As per my understanding, Interface is just having the signatures of the methods not the implementation.
    So How java support multiple inheritance by the use of interface?
    Answer 1: we can institate interface reference by its implemented
    class.
              ����� interface inf...
              ����� class aa implements inf..
              ����� class bb implements inf....
               Now, inf i = new aa();
               inf i = new bb();
    Answer 2: We can extends as many interface as we want in the
    single
               interface.
               i.e. interface infFirst....
               interface infSecond....
               interface infThird....
               Now ,
               interface ingMulti extends infFrist, infThird...
    By above two answers its not prity clear as per the multiple inheritance in C or C++.
               i.e.
               class first{
               method abc();....}
               class second{
               method bbc()......}
               class multi::first::second{
               we can call to abc();.....as well as bbc();
    -Please give your important suggstion on the same.(Hope I explain it well.)
    -Jeff

    The keyword implement is used only for interfaces not
    for abstract class. If i am wrong correct me.I believe your right, but I will double check.
    As for the multiple inheritence think about the following code:
    class Animal {
        //  Animal generic stuff in this class
    interface Eat {
        //  Generic stuff that models eating behavior
    interface Runs {
        //  generic methods that model running behavior
    public class Horse extends Animal implements Eat, Runs {
        //  Stuff specific to a horse
    }The Animal class is generic but has stuff in it common to all animals.
    The Eat interface models behavior that is generic to eating, all living things have to eat something to survive. Herbavore are different from carnivores.
    The Runs interface models generic behavior to running, such as speed. A cheeta definately runs faster than a human.
    This brings us to the Horse class. It extends the Animal class because it "is-a" animal, and it implements the eat and runs interface because they are behaviors a horse has.
    I hope that helps.
    Extending an abstract class is the same as extending a regular class with the exception you MUST override all abstract methods in the abstract class. Thats not too difficult but I believe when designing classes, designing an abstract can be more diffecult than modeling the base class, and generic behaviors in interfaces. JMO.
    JJ

  • Multiple inheritance in tagging interface? Is it possible?

    I saw a code somewhere that goes like this:
    public interface Node extends Serializable, Clonable
    ...Is it possible? I know that Java doesn't allow multiple inheritance and that Serializable and Clonable are tagging interfaces where no method must be implemented by the programmer.

    KamenRiderZX wrote:
    I know that Java doesn't allow multiple inheritanceMore exactly: Java doesn't allow multiple inheritance of implementations. Inheriting multiple interfaces ("implements" for classes, "extends" for interfaces) is fine 'though.

  • How to Fix ''The messaging interface has returned an unknown error. If the problem persists, restart Outlook.' Error

    How to Fix ''The messaging interface has returned an unknown error. If the problem persists, restart Outlook.' Error, user has outlook 2007 connected to exchange 2010 server , I tried scan pst, configuring new profile but no luck so far. Please suggest !
    Aditya Mediratta

    Hi,
    Please try the steps mentioned below and check if it helps:
    Open Computer > Local Disk C > Program Files > Microsoft Office > Office 12 > Outlook.exe.
    Right click on outlook.exe and click on Properties and then click on
    Compatibility tab. Uncheck the box ‘run this program in compatibility mode for’ under compatibility mode, click on Apply and OK.
    Note: If you are using 64 bit computer then the file location of the file will be
    Computer>Local Disk C>Program Files (x86) >Microsoft Office>Office 12>Outlook.exe
    Similar thread:
    https://social.technet.microsoft.com/Forums/en-US/aa396c9e-0ce5-4de5-99e3-4f0d771b07e0/exchange-2007-messaging-interface-has-returned-an-unknown-error
    Best Regards.

  • Multiple Inheritance of Class problem

    I want to inherit two classes in my class
    Since java does not support multiple inheritance of java classes , only can implement java interface , how can I achieve this .

    I too have a dream.
    Someday I want to see a design that uses multiple inheritance correctly. And as long as I am dreaming it might as well be a design that is not dependent on legacy applications.
    I strongly suspect that it will forever remain a dream.

  • How too ? Multiple inheritance with Interface ?

    I understand that Java does NOT allow Multiple inheritance. I've read many posts trying to understand the interface statement.
    I understand that an interface implements a behavior! But can someone please explain how I would inherit Multiple classes (Thread and JPanel) using an interface ?
    Many Thanks,
    Rob

    I understand that an interface implements a behavior!No, it doesn't. It merely defines what methods must be present in a type. A class is what actually implements the behavior for a particular implementation of that type.
    But can someone please explain how I would inherit
    Multiple classes (Thread and JPanel) using an
    interface ?You can't. Thread and JPanel are classes. A given class can only extend one class.
    A class can implement multiple interfaces however. So if at least one of Thread or JPanel were an interface, then your class could inherit from both of them. But that's not the case, so you can't.

  • How does Java achieve multiple inheritance using interfaces

    Java does not allow multiple inheritance through classes as classes might contain methods with same names. what happens if a class implements two interfaces with same method names?
    I am really confused abt this? Can anybody help me out?
    Message was edited by:
    vijkris

    yes to avoid the ambiguous functions which can result due to multiple inheritance of classes like in c++ , java doesn't have this through classes. But if you have same method (both return type and parameter) then java doesn't bother and it won't complain as ultimately only one implementation is possible in deriving class even though method declalaration is there in both the interfaces. If return type changes then it won't compile as it can't overide the both methods as they have same name and different return types. thats why inside interfaces they restricted the implementation of methods so that it can work fine in ambiguous scenarios.

  • More about multiple inheritance

    OK, you can solve problems where multiple inheritance is needed by using interfaces. But im facing a problem where it cant help me. Im constructing a system where there are componentes that need to extend JTextField as well Observable. I dont have interfaces above it in the hierarchy to substitute multiple inheritance. What can I do?
    When you have a scenario that you have to use two (or more) third party classes, and need to inherit from both, how do interfaces can help? If ate least I had multiple inheritance from classes...

    << Begin Rant >>
    I have seen more inherited code that is terribly designed because multiple inheritence was available.
    The example provided is a perfect example of this: At first blush, it seems easy to combine the UI and data components by combining Observable and JTextArea. If you were able to do this, the person inheriting your code in 3 years will curse your name.
    Nothing pisses me off more (well, I'm sure there are other things, but...) than attempting to debug C++ source code and finding that function calls are being made to multiple super classes.
    Here's a fun one: try adding an innocuous method getInfo() to a class you've inherited, only to find that someone uses getInfo() in one of the super-classes, and it has been declared as 'friend' because the design is piss poor and it was the only way they could make the function available. Now, I have to go on a goose chase searching for all the places in the entire type hierarchy that getInfo() is used and change the code to explicitly call the other base class.
    It gets to the point where its easier to name it getInfo2() (like that's good design) and get on with things.
    MI is evil, evil, evil in any environment where you are trying to have code re-use and multiple teams.
    I find that most programmers who insist that multiple inheritence is a good thing just don't know how to use the Composite design pattern.
    Sun's decision to not support MI in Java is a sound one: the result is code that can be easily read and understood.
    << End Rant >>
    Whew... I feel much better having said that...
    - K

  • Multiple Inheritance

    Hello,
    I have been programming Java for last year,
    evolved in quite some skills with it, and
    really think it is great...
    However, I was shocked to find out that there
    is no multiple inheritance feature.
    I know it is rare, and my case proves it
    (1 year now, I never needed it)
    HOWEVER, when one needs multiple inheritance,
    then they really do need it.
    I have interfaces which I would like implemented
    in their respective class (ie ISomething be
    implemented in CSomething), then some classes
    I need to implement many of those interfaces...
    Now I am forced to have those classes extend
    multiple interfaces, and duplicate the interface
    implementation code inside each of them.
    I dont mind a little bit of copy/paste, nor
    do I care about the compiled classes being
    slightly bigger, BUT the problem is that
    when I need to change some behaviour in those
    interfaces, in the near (or far) future, I will
    have their implementation scattered in many
    classes... This is dangerously error prone and
    not proffesional at all... And I do not think
    that including multiple inheritance in the language
    could be more error prone than this...
    I think the Java team does a 100% perfect brilliant
    job, but at this specific point, they "over-tried"
    to "protect" the programmers from themselves...
    Well, thats all,
    I think some next version of Java should support
    multiple inheritance. And the Java "warning" could be :
    "if you havent missed it till now, then you probably
    do not need anyway, so do not bother using it just
    because it exists"
    Thanks for reading my thoughts,
    Dimitris

    Personally I never need multiple inheritance of code and I try to avoid inheritance of code whenever possible. A common mistake in OO is too use inheritance as a way of reusing code. Code reuse is much easier, cleaner and more powerful by using composition instead. Only use inheritance for polymorhism (to use multiple implementations for the same interface). An example:
    interface A {
      void ma();
      void maa();
    interface B {
      void mb();
    class C implements A, B {
      private A a;
      private A c;
      private B b;
      public void ma() {
        a.ma();
      public void maa() {
        c.maa();
      public void mb() {
        b.mb();
    }This is much more powerful than code reuse through inheritance. In this example I use one method from 'a' and one method from 'c' when I implement interface A. I can change the value of 'a', 'b' and 'c' during runtime, and I dont have to reuse all the code in 'a' and 'b', I can select which code to reuse. This is the power of composition and interfaces. Note that I only access 'a', 'b' and 'c' through the interfaces A and B, never directly through their implementations.
    I would recommend you to look at your design and start to think about interfaces and inheritance, not about code reuse though inheritance.

  • Alternatives to multiple inheritance for my architecture (NPCs in a Realtime Strategy game)?

    Coding isn't that hard actually. The hard part is to write code that makes sense, is readable and understandable. So I want to get a better developer and create some solid architecture.
    So I want to do create an architecture for NPCs in a video-game. It is a Realtime
    Strategy game like Starcraft, Age of Empires, Command & Conquers, etc etc.. So I'll have different kinds of NPCs. A NPC can have one to many abilities (methods) of these: Build(), Farm() and Attack().
    Examples:
    Worker can Build() and Farm()
    Warrior can Attack()
    Citizen can Build(), Farm() and Attack()
    Fisherman can Farm() and Attack()
    I hope everything is clear so far.
    So now I do have my NPC Types and their abilities. But lets come to the technical / programmatical aspect.
    What would be a good programmatic architecture for my different kinds of NPCs?
    Okay I could have a base class. Actually I think this is a good way to stick with the DRY principle.
    So I can have methods like WalkTo(x,y) in
    my base class since every NPC will be able to move. But now lets come to the real problem. Where do I implement my abilities? (remember: Build(), Farm() and Attack())
    Since the abilities will consists of the same logic it would be annoying / break DRY principle to implement them for each NPC (Worker,Warrior, ..).
    Okay I could implement the abilities within the base class. This would require some kind of logic that verifies if a NPC can use ability X. IsBuilder, CanBuild,
    .. I think it is clear what I want to express.
    But I don't feel very well with this idea. This sounds like a bloated base class with too much functionality.
    I do use C# as programming language. So multiple inheritance isn't an opinion here. Means: Having extra base classes like Fisherman
    : Farmer, Attacker won't work.

    Hi
    PandoraElite,
    You can inherit from multiple interfaces (and use explicit interface implementation), but not from classes in C#. You can almost simulate it:
    In C# we don't support multiple inheritance
    http://blogs.msdn.com/b/csharpfaq/archive/2004/03/07/why-doesn-t-c-support-multiple-inheritance.aspx
    What would be a good programmatic architecture for my different kinds of NPCs?
    In your scenario, we can define some interface ,An interface contains only the signatures of methods, properties, events or indexers. A class or struct that implements the interface must implement the members of the interface that are specified
    in the interface definition.
    How to use? Please refer to the following article.
    http://www.codeproject.com/Articles/18743/Interfaces-in-C-For-Beginners
    Best of luck!
    Kristin
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

Maybe you are looking for

  • How to add a new element to a model node in the view controller?

    View Context     myNode          attri1          attri2 myNode is a web service model node. How to add a new element to this node? Regards, Hui Edited by: Hui Wang on Feb 15, 2008 12:05 PM

  • Hooking up external dvd player

    I am trying to use an external dvd player ( memorex ) I have tried playing two dvd windows based games ( quake 2 and rage from 1998 ) my laptop only shows it as a music cd. IS there settings i can change to be able to play games?

  • Import-Export of track add some old projects and files.

    We want to copy one NWDI track to new one. When we Forward one track to to created new one, and open projects in Development Studio, many old projects and files appeared, thatis not visible if to open old track in Studio. So question is - how to expo

  • EJB + ODMiner

    I had earlier sent the following message and had recived the following message : </ EJB + oracle.dmt.odm.Connection Jan 26, 2005 11:44 AM Hello, I am developing a webbased application on java which also includes datamining. Now the structure of my pr

  • Orakle Workflow

    Can anyone tell me where I can find information's on how I can install Oracle Workflow Server. Because I have the problem that when I start the Workflow Configuration Assistent I got the messeg "No Oracle 10g" Database installed. But I have a 10g ins