当前位置: 首页 > 知识库问答 >
问题:

父类中的子实例

卢俊发
2023-03-14

我有java中的类:A。和类B,它扩展了类A

ClassA保留ClassB实例

我注意到,当我调用类B的构造函数时(当我在类A中初始化这个参数时),它会执行super(),创建一个新的实例A,并初始化所有It字段。

我如何告诉classB类A的具体实例(哪个init it字段)-它是它的父类?


共有2个答案

公孙森
2023-03-14

如果需要B中的A,可以使用B的自定义构造函数:

class B extends A {

    A a;     

    public B() {
        super();
        this.a = this;
    }
}

但这种情况更难处理,因此您需要:

class A {
    B b;     
}

class B extends A {
     public B() {
         super();
         b = this;
     }
}

请注意,不应将B传递到对super()的调用中,因为B不会被初始化,应将其作为B的构造函数中的最后一步。

逑和蔼
2023-03-14

你的问题真的很难理解,但我想问题是这样的(你的方法):

public class A {
    public B b = new B();
}

public class B extends A {
}

因此,当您运行new A()时,您会得到一个StackOverflow Error

根据我的实际经验,我从来都不需要这样的设计,我强烈建议你重新考虑一下你的方法。但是,如果确实需要,可以使用专用的init()方法,例如:

public class A {
    public B b;

    public void init() {
        b = new B();
    }
}


A a = new A();
a.init();
 类似资料:
  • 我是C语言的新手,正在寻找关于以下问题的建议。我正试图创建一个程序,生成树的形状(是的,真正的树)。这些形状完全由树枝构成。为此,我开始编写一个名为Branch的类。主要的想法是。cpp I创建一个类Branch的实例,它本身将创建Branch的实例。这适用于迭代。 目前,该计划的结构如下: main.cpp: 树枝h: 树枝cpp: 现在,这个程序可以工作,但是我想通过将每个对象存储在一个向量中

  • 本文向大家介绍python中子类继承父类的__init__方法实例,包括了python中子类继承父类的__init__方法实例的使用技巧和注意事项,需要的朋友参考一下 前言 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的 初始化 。 注意:这个名称的开始和结尾都是

  • 我想创建一个抽象的父类,其中包含方法公共抽象使用();和使用方法在不同的子类是不同的,但利用父方法的所有Rest,但我希望父类包含一个私有变量,但它需要设置从特定的孩子取决于孩子所以像我有一个家长车,我想与汽车一般工作,但为特定目的的use()方法和设置汽车图像我使用保时捷类这是一个孩子。我不希望汽车图像属性是可访问的,但同时如果它的私人我不能从子构造函数设置它,有什么想法吗?我的问题是如何设置一

  • 本文向大家介绍C#中子类调用父类的实现方法,包括了C#中子类调用父类的实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#中实现子类调用父类的方法,分享给大家供大家参考之用。具体方法如下: 一、通过子类无参构造函数创建子类实例 创建父类Person和子类Student。 在客户端通过子类无参构造函数创建子类实例。 输出结果: 可见:通过调用子类无参构造函数创建子类实例,会默认调用父

  • 为什么我们不能在子类B中声明一个实例方法,它与父类a中的静态方法共享相同的签名? 在上面的代码中,由于A没有该名称的实例方法,并且由于Java允许对象访问静态方法,所以指向B的类型为A的对象A可以调用它中存在的静态方法(类A)。但是编译器抛出一个错误“实例方法不能重写静态方法”为什么? 注意:我可以理解,如果一个类不允许两个方法使用相同的方法名,即使其中一个是实例,另一个是静态的。但是我不明白为什

  • 我在想有没有更好的办法。我想要的是在抽象类中有一个具体的方法,返回扩展抽象类的具体实例。 我认为我不应该把它转换成T,因为它总是T的一个实例。