标签:java oop inheritance abstract-class
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();
}
}
在我的应用程序的另一部分,我尝试访问新的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“修复”错误.
这是一个有问题的“修复”,还是会在没有任何打嗝的情况下正常工作?
解决方法:
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();
标签:java,oop,inheritance,abstract-class 来源: https://codeday.me/bug/20190710/1425750.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。