【问题标题】:Valid object declarations and using dot operators有效的对象声明和使用点运算符
【发布时间】:2019-01-18 06:50:54
【问题描述】:
public class Top{ 
    public int top = 1;
    public Top(int top){ this.top = top; }
}
public class Middle extends Top{
    public Middle(int top){
        super(top);
        this.top = this.top + top;
    }
}
public class Bottom extends Middle{
    public Bottom(){ super(3); }
    public Bottom(int top){
        super(top);
        this.top = top;
    }
}

对于这个类,我很困惑为什么 Top t = new Top() 是一个无效的声明?是否必须有一个传递参数才能使这个正在创建的对象 t 有效?

为什么 1) Top t = new Bottom() 和 2) Top t = new Top(3) 有效?我是 java 新手,底层类是否有一个空的构造函数,所以 1) 有效吗?

另外,例如 Top t = new Middle(2),我将如何在不使用代码的情况下继续找出 t.top?就像点运算符总是让我失望一样,我在想的是对象“t”与顶部变量的属性相关联吗?它应该等于 4,但我试图弄清楚这一点,但这些概念现在对我来说似乎很陌生。任何解释将不胜感激。

【问题讨论】:

  • 将您要询问的代码以文本形式发布在问题本身中。不作为图像的链接。我们无法从图像中复制和粘贴。盲人无法阅读图像。
  • 多态性。而且因为Top 不是抽象的。
  • 为什么Top 应该知道子类提供了默认构造函数?
  • 首先也不存在constructor-inheritance这样的东西

标签: java object


【解决方案1】:

我很困惑为什么 Top t = new Top()

因为Top 没有无参数构造函数。如果您像在Bottom 中那样添加一个,它将生效。

【讨论】:

    【解决方案2】:

    当你初始化构造函数Top(int top)时,你把一个int作为参数,所以你在调用构造函数的时候必须传递一个int。 它就像您使用普通方法一样工作。 参数类型必须与参数类型匹配。您不能将 void 参数传递给使用 intdouble 参数初始化的方法。

    【讨论】:

      猜你喜欢
      • 2011-10-16
      • 2021-12-07
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多