ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – x.y.z中的method()是在一个不可访问的类或接口中定义的

2019-07-10 16:12:49  阅读:551  来源: 互联网

标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有