java - 如果超构造函数中有参数,则超类内部类的构造函数是未定义的
问题描述
我有一个类A
,并且A_sub
是一个内部类A
。
public class A {
protected class A_sub {
int A_sub_x = 1;
A_sub parent;
A_sub(A_sub obj_A_sub) {
System.out.println("Constructor A.A_sub");
parent = obj_A_sub;
}
}
public A() {
System.out.println("Constructor A");
}
}
然后我有一个带有方法的类Main
(扩展) 。也有一个内部类(扩展)。但是我在“构造函数 A.A_sub() 未定义”这一行收到一条错误消息。我怎样才能解决它?A
main
Main
A_sub
A.A_sub
super()
class Main extends A{
public Main() {
}
private class A_sub extends A.A_sub{
int A_sub_z;
A_sub(A_sub obj_A_sub) {
super();
System.out.println("Constructor Main.A_sub");
A_sub_z = 3;
}
}
public static void main(String args[]) {
Main obj = new Main();
A_sub obj_sub = obj.new A_sub(null);
System.out.println(obj_sub.A_sub_x);
System.out.println(obj_sub.A_sub_z);
}
}
解决方案
真的没有构造函数,因为A$A_sub.A_sub()
你拥有的构造函数需要一个A_sub
参数。解决此问题的一种方法是将Main$A_sub.A_sub
's 参数传递给其父构造函数:
class Main extends A{
private class A_sub extends A.A_sub{
int A_sub_z;
A_sub(A_sub obj_A_sub) {
super(obj_A_sub);
// Here-^
System.out.println("Constructor Main.A_sub");
A_sub_z = 3;
}
}
// The rest of Main's constructors and methods have been snipped for brevity
}
推荐阅读
- graphql - 无法使用 Apollo Client Hooks 中的 useSubscription 和 useMutation
- snowflake-cloud-data-platform - SQL 编译错误:位置 6 处的语法错误第 2 行意外'R'
- r - 错误:无法对不存在的列进行子集化 - 从 R 中的寓言中选择
- ruby-on-rails - 在 AWS ECS 上设置 Rails 6 的正确方法
- python - 根据文件所在文件夹的创建日期重命名文件
- php - 激活邮件订阅者插件时出现严重错误
- javascript - 如何使用 Javascript 过滤功能根据用户输入过滤引导卡
- angular - 使用 Traefik IngressRoute 为 Angular 服务重写目标后无法匹配路由
- elixir - Phoenix 阻止 conn 从 Liveview 重定向
- excel - 如何以数学方式计算日期时间值的未格式化值