【发布时间】:2018-09-16 13:56:45
【问题描述】:
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();
}
}
在我的应用程序的另一部分,我尝试访问 new User().use().a(),我认为这会导致错误(虽然这是一个编译时错误)。
尝试编译上述错误:
a() in x.y.z.Super is defined in an inaccessible class or interface
是什么导致了这个错误,我该如何解决?
新问题
这让我的错误消失了:
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();
}
}
将User.use() 的类型更改为Super“修复”错误。
这是一个有问题的“修复”,还是可以正常工作而不会出现任何问题?
【问题讨论】:
-
不确定,但从公共方法返回私有内部类可能不是一个好主意。
-
您使用的是什么 IDE?它为我正常编译,我无法重现该错误。
-
@JacobG。当我尝试在其他地方访问
new User().use().a()时,错误实际上出现了,我正在使用 maven 构建 -
标签: java oop inheritance abstract-class