为什么我不能这样做/是否有解决方法来完成此任务:

package myPackage;

public class A {

public class B {

}

}

package myPackage;

import myPackage.A.B;

public class C extends B {

}

package myPackage;

public class Main {

public static void main(String[] args) {

A myA = new A();

C myC = myA.new C();

}

}

两个编译错误是

>在公共类C上扩​​展B,由于某些中间构造函数调用,没有包含类型A的封闭实例

>在C myC = myA.new C();, A.C无法解析为某种类型

坦率地说,我认为概念是合理的:我想制作B的子类,这样当我为A制作B时,我可以选择使其具有B中的功能或C中的功能.

我不想要的四种解决方法/解决方案,以及为什么我不想要它们:

>“解决方案:将C放入A.”我不想这样,因为如果我不能修改A.java的代码(有应用程序有这个限制)怎么办?如果A是另一个API的一部分怎么办?然后我必须为C创建一个新文件,就像我在这里所做的那样.

>“解决方案:将C放在扩展A的D类中.”我不希望这样,因为C被限制为仅在类型D的实例上实例化.我想创建一个扩展B的类,可以在类型A的所有实例上实例化(有些应用程序需要这样).因此,我需要C不被其他类封闭,就像我在这里所做的那样.

>(作为问题编辑添加 – 请参阅JoshuaTaylor对代码示例的回答)“解决方案:使B静态.”我不希望这样,因为如果B中的功能需要访问其封闭的A实例(有应用程序需要这个),该怎么办?因此,我需要B不是静态的,就像我在这里所做的那样. (第二个问题编辑:你可以使B静态并使其构造函数接受其封闭的实例,将其保存在受保护的变量中以便在其子代中访问,但这不如RealSkeptic接受的答案优雅)

>删除.请参见底部的编辑.

所以,如果你的答案表明我做了上述其中一个,那么这不是这个问题的答案,即使它可能对其他人有用.

如果您的答案是“这只是Java语言的一个缺陷,那么您根本无法实现这个概念性的想法”,这是一个好的答案,您应该发布它.但是只是一个警告:如果你错了,我会推迟你的答案.如果这是您的答案,我将非常感谢您解释为什么对该语言的这种限制已经存在(因为这是该问题的标题).

感谢您的帮助.

编辑:JoshuaTaylor的答案提出了一个有效的选项:你可以扩展B anonymously并避免编写构造函数,就像在RealSkeptic接受的答案中一样.我最初放弃了这个想法,因为它不允许你通过“A.this”访问C的封闭A实例.但是,我已经知道C没有A的封闭实例,除非它在A的定义中被特别定义为嵌套类.所以请注意:以下解决方案中没有一个允许您通过在C方法中编写“A.this”来访问包含C的祖先B的A的封闭实例.类只能使用“.this”来访问它们的类型具体嵌套在.但是,如果B具有访问A的封闭实例的功能,则需要通过JoshuaTaylor方法的匿名类或通过RealSkeptic方法的任何其他类.

java继承a mya new c,java – 为什么外部类不能扩展内部类?相关推荐

  1. java继承a mya new c,JAVA注解

    注解本质和原理 注解的本质就是,定义了一个接口实现了java.lang.annotation.Annotation 接口.我们定义一个注解类,然后进行编译,再反编译.如下,我们定义一个自定义的注解 p ...

  2. java继承a mya new c,“内部类” 大总结(Java),内部类总结java

    "内部类" 大总结(Java),内部类总结java (本文整理自很久以前收集的资料(我只是做了排版修改),作者小明,链接地址没有找到,总之感谢,小明) 内部类的位置: 内部类可以作 ...

  3. Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态

    Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...

  4. java 继承 子类 实例化_关于Java继承中父类和子类构造函数的问题

    Java子类在实例化时默认调用的是父类的无参构造函数,不论实例化时调用的是子类的有参还是无参构造函数, 1.当父类没有显式定义构造方法时, 编辑器会默认为此类添加一个隐式无参构造函数.此时子类可以有自 ...

  5. java继承总结_JAVA笔记:Java中的继承总结

    继承:在Java中使用extends关键字来实现类的继承  ,extends意思就是派生,所以子类也叫派生类,继承的主要目的是扩展类的内容 操作格式: class A{}; class B exten ...

  6. Java继承_这10道Java面试题!大部分的人回答不出来

    1.为什么等待和通知是在 Object 类而不是 Thread 中声明的? 2.为什么Java中不支持多重继承? 3.为什么Java不支持运算符重载? 4.为什么 String 在 Java 中是不可 ...

  7. java继承数组实例_【Java】理解封装、继承、多态和对象数组的综合实例(简易的租车系统,附代码)...

    一.Drive.java(汽车类 - 父类) package Z_CarManger; import java.io.ObjectInputStream.GetField; public abstra ...

  8. java继承a mya new c,【转】Android应用程序完全退出

    前段期间,参加比赛做项目时遇到了一个问题:Android中应用程序弹出退出对话框退出应用程序时,老是出现上一个Activity,于是将在Activity跳转时将其finish()掉,结果还是不行!寻其 ...

  9. java继承与实现的_[Java学习] Java继承的概念与实现

    继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似. 继承可以理解为一个类从另一个类获取方法和属性的过程.如果类B继承于类A,那么B就拥有A的方法和属性. ...

最新文章

  1. Docker系列教程09-使用Docker Hub管理镜像
  2. 分峰截幅c语言算法,面向桥梁健康监测的复合传感技术研究
  3. docker学习------centos7.5下的swarm集群可视化构建
  4. python print 输出到txt_Python的print()输出形式
  5. java 生成不重复随机数_Java如何实现生成n个不重复的随机数 Java实现生成n个不重复的随机数代码...
  6. rails关于utf8问题-------------------utf8申明必须置顶
  7. 【数字信号调制】基于matlab GUI ASK+OOK+BPSK+8PSK+QPSK+AM调制解调【含Matlab源码 1368期】
  8. 虚拟机 linux 设置IP 常用命令
  9. Oracle 在SQL语句中如何获取系统当前时间并进行操作
  10. Wget下载网页与镜像网站
  11. php 正则车架号,js 正则校验车架号VIN
  12. 网络爬虫Python试验
  13. 音频技术的下一个“热点”,会出现在哪个领域?丨一期一会 • 音频工程师专场
  14. PHP复习_封装万能的PDO类
  15. 力扣6. Z 字形变换
  16. javascript 之排列组合
  17. 搜狗2019年Q2财报:搜索业务增速领先行业,AI成为新增长引擎
  18. 我劝你最好别偷看我的HTTP总结
  19. 中芯国际二零一八年第三季度业绩公布
  20. uvm打印信息冗余度和重载打印信息

热门文章

  1. 手电筒java下载_Android studio编写简单的手电筒APP
  2. 我爱Flask之url_for()方法和HTTP请求
  3. 读书笔记《人人都是产品经理》
  4. 怎么配置java环境_idea配置java环境
  5. Android中的三级缓存解析与实战
  6. 房贷中的等额本息和等额本金有什么区别?
  7. html的三种样式定义方式:外部样式表;内部样式表;内联样式表
  8. 在HBuilder创建前端web项目时,图片加载不出来,怎么解决?
  9. 工业互联网和物联网有什么关系?
  10. 输入一行字符,分别统计出其数字、大写字母、小写字母和其他字符的个数。