如何使这种继承在 Java 中起作用? [关闭]

Posted

技术标签:

【中文标题】如何使这种继承在 Java 中起作用? [关闭]【英文标题】:How to make this inheritance work in Java? [closed] 【发布时间】:2014-01-11 15:32:00 【问题描述】:

我们如何在不改变类 b 的情况下编译下面的代码?

class a 
    public a(int x) 
        System.out.println(x);
    


class b extends a 
    public b(int x) 
        //super(x);
            
 

【问题讨论】:

如果不能改b类,就改a类。您从编译器获得的错误消息会告诉您问题所在。阅读它。 只需在class a 中声明一个无参数构造函数。 没有在类中声明默认构造函数..有没有其他方法可以解决这个问题。贝科兹。我的一个朋友问这个怀疑我。 有人不断降低我的观点。这种行为让我很沮丧。 你的朋友嗯?他是否有机会以老师或教授的名义出现? 【参考方案1】:

当子类扩展超类时,如果没有编写构造函数,则采用默认构造函数。但是,如果在类编译器中编写的任何构造函数都不会保留默认构造函数。当子类继承超类时,必须有默认构造函数,因为继承编译器总是先去超类构造函数,然后是子类构造函数。例如:

如果我们有

class A

class B extends A

我们不需要编写构造函数。编译器将采用默认构造函数。

如果我们有

class A
    public A(double i)
    


class B extends A
     public B(double j)
     

在这种情况下,我们需要为超类编写显式的默认构造函数。

【讨论】:

【参考方案2】:

对于它的价值,您需要在父类中添加一个零参数构造函数,代码将开始正常编译。

class a 
public a() 

public a(int x) 
    System.out.println(x);




class b extends a 

public b(int x) 
    //super(x);


    

【讨论】:

为什么这些解决方案被否决?这是一个正确的答案。【参考方案3】:

我不完全确定您想要实现什么,但要编译它,只需将隐式构造函数添加到类 a

class a 

    public a(int x) 
        System.out.println(x);
    

    public a() 
        // implicit constructor
    

由于b 扩展a 并且不调用超级构造函数,所以a 的隐式构造函数被称为“幕后”。因此a必须提供一个。

【讨论】:

我知道..如果我们在任何类中都有显式构造函数..它将取代默认的隐式构造函数。 只是我在问其他可能性。 没有其他可能,就这么简单。

以上是关于如何使这种继承在 Java 中起作用? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使径向渐变在 Safari 中起作用?

如何使用户定义的运行时属性在 xcode 10.2.1 和 ios 12.2 中起作用

使Print方法在Form_Load事件中起作用,如何对窗体的属性进行设置?

继 承

继 承(面向对象特征之二)

使用 SSH 密钥登录在 Git Bash 上不起作用,但在 Windows 命令提示符中起作用 [关闭]