【问题标题】:Java Constructor Super parametersJava 构造函数超参数
【发布时间】:2013-01-31 15:17:37
【问题描述】:

查看抽象类ByteBuffer 的代码,很明显它继承自基类Buffer

ByteBuffer 有一个构造函数:

ByteBuffer(int capacity) {
    super(capacity);
}

Buffer 有一个构造函数:

Buffer(int mark, int pos, int lim, int cap) { 
    ...
}

所以我的问题是 - 当ByteBuffer 调用它的父构造函数时,这是如何工作的,因为参数不匹配?

更新:这不是问题,但值得知道的是,一些在线 Java 源存储库(在本例中为 docjar)包含 Java 源的混搭。最好下载JDK **

【问题讨论】:

  • 好吧,我很感兴趣。
  • 我的 ByteBuffer 版本(oracle jdk 7)没有int 构造函数。不确定您的链接指向什么...是的,super(capacity) 只有在超类中有 Buffer(int capacity) 时才能工作。
  • 这可能是版本不匹配。我现在没有 JDK 7,但是在 JDK 6 中没有 ByteBuffer(int) 构造函数,只有一个与 Buffer(int, int, int, int) 构造函数匹配的 ByteBuffer(int, int, int, int)
  • 你用的是什么版本的java?我看到ByteBuffer 是一个抽象类作为 Buffer 并且看不到您给出的 conturtor。但我看到了static allocate method
  • 链接在问题中(锚点不是很明显,但它们是我编写 Buffer 和 ByteBuffer 的地方)。我在看docjar。听起来很正式!

标签: java class inheritance constructor


【解决方案1】:

似乎是文档错误。

GrepCode 上的 ByteBuffer 源是正确的。

  ByteBuffer(int mark, int pos, int lim, int cap,   // package-private
274                  byte[] hb, int offset)
275     {
276         super(mark, pos, lim, cap);
277         this.hb = hb;
278         this.offset = offset;
279     }
280 

【讨论】:

  • 哦!多么令人失望,我以为我发现了一些 Java 魔法。谢谢! (尽管它确实引发了一个问题:是否有“官方”可浏览的 Java 源代码?
  • @starfish:它在你的 JDK 的 src.zip 文件中。
  • 你可以从Oracle下载源代码(我认为它甚至可能默认包含在jdk中 - 寻找src.zip)
【解决方案2】:

恐怕您正在查看的 Buffer 类已过时 - 当前的 javadoc 有:

ByteBuffer(int mark, int pos, int lim, int cap) {   // package-private
ByteBuffer(int mark, int pos, int lim, int cap,          // package-private
  byte[] hb, int offset)

【讨论】:

    猜你喜欢
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 2016-06-05
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多