an abstract class inherits another abstract class issue

18,630

Solution 1

The two immediate problems I see is that your final ExchangeFileAttachment class is declared abstract, so you'll never be able to instantiate it. Unless you have another level of inheritance you are not showing us, calling it will not be possible - there's no way to access it. The other problem is that BaseFileAttachment has a property that is hiding the GetName() in BaseAttachment. In the structure you are showing us, it is redundant and can be omitted. So, the 'corrected' code would look more like:

public abstract class BaseAttachment
{
    public abstract string GetName();
}

public abstract class BaseFileAttachment : BaseAttachment
{
}

public class ExchangeFileAttachment : BaseFileAttachment
{
    string name;
    public override string GetName()
    {
        return name;
    }
}

I put corrected in quotes because this use-case still does not make a ton of sense so I'm hoping you can give more information, or this makes a lot more sense on your end.

Solution 2

Just remove the redeclaration from BaseFileAttachment:

public abstract class BaseFileAttachment : BaseAttachment
{
}

BaseFileAttachment already inherits the abstract GetName declaration from BaseAttachment. If you really want to mention it again in BaseFileAttachment, use the override keyword:

public abstract class BaseFileAttachment : BaseAttachment
{
    public override abstract string GetName(); // that's fine as well
}
Share:
18,630
stoney78us
Author by

stoney78us

Updated on June 04, 2022

Comments

  • stoney78us
    stoney78us almost 2 years

    I have an inheritance schema like below:

    public abstract class BaseAttachment
    {
        public abstract string GetName();
    }
    
    public abstract class BaseFileAttachment:BaseAttachment
    {
        public abstract string GetName();
    }
    
    public class ExchangeFileAttachment:BaseFileAttachment
    {
        string name;
        public override string GetName()
        {
            return name;
        }
    }
    

    I basically want to call GetName() method of the ExchangeFileAttachment class; However, the above declaration is wrong. Any help with this is appreciated. Thanks