java继承a mya new c,java – 为什么外部类不能扩展内部类?
为什么我不能这样做/是否有解决方法来完成此任务:
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 – 为什么外部类不能扩展内部类?相关推荐
- java继承a mya new c,JAVA注解
注解本质和原理 注解的本质就是,定义了一个接口实现了java.lang.annotation.Annotation 接口.我们定义一个注解类,然后进行编译,再反编译.如下,我们定义一个自定义的注解 p ...
- java继承a mya new c,“内部类” 大总结(Java),内部类总结java
"内部类" 大总结(Java),内部类总结java (本文整理自很久以前收集的资料(我只是做了排版修改),作者小明,链接地址没有找到,总之感谢,小明) 内部类的位置: 内部类可以作 ...
- Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态
Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...
- java 继承 子类 实例化_关于Java继承中父类和子类构造函数的问题
Java子类在实例化时默认调用的是父类的无参构造函数,不论实例化时调用的是子类的有参还是无参构造函数, 1.当父类没有显式定义构造方法时, 编辑器会默认为此类添加一个隐式无参构造函数.此时子类可以有自 ...
- java继承总结_JAVA笔记:Java中的继承总结
继承:在Java中使用extends关键字来实现类的继承 ,extends意思就是派生,所以子类也叫派生类,继承的主要目的是扩展类的内容 操作格式: class A{}; class B exten ...
- Java继承_这10道Java面试题!大部分的人回答不出来
1.为什么等待和通知是在 Object 类而不是 Thread 中声明的? 2.为什么Java中不支持多重继承? 3.为什么Java不支持运算符重载? 4.为什么 String 在 Java 中是不可 ...
- java继承数组实例_【Java】理解封装、继承、多态和对象数组的综合实例(简易的租车系统,附代码)...
一.Drive.java(汽车类 - 父类) package Z_CarManger; import java.io.ObjectInputStream.GetField; public abstra ...
- java继承a mya new c,【转】Android应用程序完全退出
前段期间,参加比赛做项目时遇到了一个问题:Android中应用程序弹出退出对话框退出应用程序时,老是出现上一个Activity,于是将在Activity跳转时将其finish()掉,结果还是不行!寻其 ...
- java继承与实现的_[Java学习] Java继承的概念与实现
继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似. 继承可以理解为一个类从另一个类获取方法和属性的过程.如果类B继承于类A,那么B就拥有A的方法和属性. ...
最新文章
- Docker系列教程09-使用Docker Hub管理镜像
- 分峰截幅c语言算法,面向桥梁健康监测的复合传感技术研究
- docker学习------centos7.5下的swarm集群可视化构建
- python print 输出到txt_Python的print()输出形式
- java 生成不重复随机数_Java如何实现生成n个不重复的随机数 Java实现生成n个不重复的随机数代码...
- rails关于utf8问题-------------------utf8申明必须置顶
- 【数字信号调制】基于matlab GUI ASK+OOK+BPSK+8PSK+QPSK+AM调制解调【含Matlab源码 1368期】
- 虚拟机 linux 设置IP 常用命令
- Oracle 在SQL语句中如何获取系统当前时间并进行操作
- Wget下载网页与镜像网站
- php 正则车架号,js 正则校验车架号VIN
- 网络爬虫Python试验
- 音频技术的下一个“热点”,会出现在哪个领域?丨一期一会 • 音频工程师专场
- PHP复习_封装万能的PDO类
- 力扣6. Z 字形变换
- javascript 之排列组合
- 搜狗2019年Q2财报:搜索业务增速领先行业,AI成为新增长引擎
- 我劝你最好别偷看我的HTTP总结
- 中芯国际二零一八年第三季度业绩公布
- uvm打印信息冗余度和重载打印信息