Method () in xyz is defined in an inaccessible class or interface

Super.java

package x.y.z;

public abstract class Super {
  public CustomClass a() {
    return new CustomClass();
  }

  public abstract String getName();
  public abstract String getDescription();
}

Sub.java

package x.y.z;

public abstract class Sub extends Super {
  public String getDescription() {
    return "Is a Sub";
  }
}

User.java

package x.y.z;

public class User {
  private class UseCase extends Sub {
    public String getName() {
      return "UseCase";
    }
  }

  public UseCase use() {
    return new UseCase();
  }
}

In another part of my application, I'm trying to access new User().use().a(), and I think this is causing an error (although this is a compile-time error).


Trying to compile the above errors:

a() in x.y.z.Super is defined in an inaccessible class or interface

What causes this error and how to fix it?


New question

This makes a mistake for me:

User.java

package x.y.z;

public class User {
  private class UseCase extends Sub {
    public String getName() {
      return "UseCase";
    }
  }

  public Super use() {
    return new UseCase();
  }
}

Changing the type User.use()to Super"fix" the error.

Is this a problematic “fix”, or will it work fine without any hiccups?

+4
source share
2 answers
a() in x.y.z.Super is defined in an inaccessible class or interface

UseCase, , . , :

User user = new User();
Sub sub = user.use(); // because of implicit up-casting to Sub (and Sub is public)
sub.a();

3 , :

CustomClass custom = ((Sub) new User().use()).a();

, , use(...) Sub Super, :

CustomClass custom = new User().use().a();
0

, , User#use (.. UseCase), private User, User. UseCase public private .

public class UseCase extends Sub {
    @Override
    public String getName() {
        return "UseCase";
    }
}
0

Source: https://habr.com/ru/post/1695875/


All Articles