Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6232423
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 24, 20262026-05-24T10:06:52+00:00 2026-05-24T10:06:52+00:00

I have some class inheritance SubClass < MidClass < SuperClass and want to perform

  • 0

I have some class inheritance SubClass < MidClass < SuperClass and want to perform some TASK upward for all these classes. TASK is quite complex with only minor changes in the 3 classes, which I moved into the private methods m2().

My current solution is very boiler plate:

class SuperClass {
  protected void m1() {
    //TASK (calls m2())
  }

  private void m2() {
    //...
  }
}

class MidClass extends SuperClass {
  protected void m1() {
    //same TASK (calls m2())
    super.m1();
  }

  private void m2() {
    //...
  }
}

class SubClass extends MidClass {
  protected void m1() {
    //same TASK (calls m2())
    super.m1();
  }

  private void m2() {
    //...
  }
}

Can I exploit some code reuse mechanism instead of copying TASK?

Something like the following, with m1() only in SuperClass, does not work:

class SuperClass {
  protected final void m1() {
    //TASK (calls m2())
    if (!(this.getClass().equals(SuperClass.class))) {
      super.m1();
  }
}

because super.m1() does not refer to execution of the same inherited method in the context of a super class, but to the overridden method implementation. Since m1() does not exist in Object, I additionally get a compiler error…

Putting TASK in a protected final helper() method in SuperClass and calling helper() instead of copying TASK won’t work, since then always SuperClass.m2() gets called.

The only alternative I can think of is slow, complicated and unsafe: using a type token as parameter, i.e. protected final void m1(Class<? extends SuperClass> clazz) in SuperClass, and fulfilling TASK via reflection (requires to make m2() public static or use setAccessible(true) on m2()).

Do you know some better solution? AOP? Maybe some framework where you can inject a method into classes (as in C#)? Or am I missing something???

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-24T10:06:52+00:00Added an answer on May 24, 2026 at 10:06 am

    Solution for my concrete example of mixed-type equals() with default value constraints instead of ignoring the subclass value fields. Instead of Angelika Langer’s solution (see http://www.angelikalanger.com/Articles/JavaSolutions/SecretsOfEquals/Equals-2.html) with private methods _compareFields() and a protected method _navigateClassHierarchy() that has to be copied into each subclass, only a protected method compareOwnFields() is used, which has to be overridden correctly in each subclass.

    class SuperClass {
        // ...
    
        @Override
        public final boolean equals(final Object other) {
            if (other == this) { return true; }
            if (!(other instanceof SuperClass)) {
                return false;
            }
            final SuperClass otherSuperClass = (SuperClass) other;
    
            return compareOwnFields(otherSuperClass, false)  
            && otherSuperClass.compareOwnFields(this, true);
        }
    
        protected boolean compareOwnFields(final SuperClass other, 
            final boolean firstTraversal) {
            if (!firstTraversal) {
                return true;
            }
            if (field1 != other.getField1()) {
               return false;
            } 
            // compare other fields similarly ...
            return true;
        }
    
    }    
    
    class SubClass {
        // ...
    
        @Override
        protected boolean compareOwnFields(final SuperClass other, 
            final boolean firstTraversal) {
            if (other instanceof SubClass && !firstTraversal) {
                return true;
            if (other instanceof SubClass) {
                if (field1 != ((SubClass) other).getField1()) {
                    return false;
                }
                // compare other fields similarly ...
                return super.compareOwnFields(other, firstTraversal);
            } else {
                if (field1 != DEFAULT_FIELD1) {
                    return false;
                }
                // check other fields for default values similarly ..
                return super.compareOwnFields(other, firstTraversal);
            }
        }
    }
    

    But this does not answer my question in general, it’s rather a redesign that avoids the problem. So further answers on how to solve the problem with the Java language features are very welcome!

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have some classes layed out like this class A { public virtual void
I have some ASP.NET web services which all share a common helper class they
I have some logic, which defines and uses some user-defined types, like these: class
I'm looking at some Java classes that have the following form: public abstract class
So let us say I have some chain of classes where each class is
Suppose I have some per-class data: (AandB.h) class A { public: static Persister* getPersister();
What exactly are the Python scoping rules? If I have some code: code1 class
I have some event handler on a boundary class that manages a persistence mechanism
I have some code that will be accessed from two threads: class Timer{ public:
Say I have some code like namespace Portal { public class Author { public

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.