此关键字与继承-Java

此关键字与继承-Java,java,inheritance,this,Java,Inheritance,This,好吧,这一直在困扰着我。(双关语?) 忽略变量类型,因为这不是问题所在 假设您有一个父类,例如book类,带有变量ISBN。构造函数使用this.ISBN=bla设置ISBN 现在有一个儿童班。它有一个调用其父构造函数的构造函数。首先,承包商是如何形成的?像这样 public kidsBook(ISBN, kidVariable) { super(ISBN); this.kidVariable = kidVariable; } 这样做对吗?如果是这样的话,就会产生第二个问题:来自父

好吧,这一直在困扰着我。(双关语?)

忽略变量类型,因为这不是问题所在

假设您有一个父类,例如book类,带有变量ISBN。构造函数使用
this.ISBN=bla
设置ISBN

现在有一个儿童班。它有一个调用其父构造函数的构造函数。首先,承包商是如何形成的?像这样

public kidsBook(ISBN, kidVariable) {
   super(ISBN);
   this.kidVariable = kidVariable;
}
这样做对吗?如果是这样的话,就会产生第二个问题:来自父类的this.ISBN,当在子构造函数中调用来自父类的构造函数时,this关键字是否引用子版本的ISBN

这真的让我很困惑,我敢打赌我写这篇文章的方式表明了我的困惑


编辑:修复了与问题无关的代码错误。

您的思路正确。你的问题的答案是肯定的

下面是使用正确语法的完整代码

class Book {
    String ISBN;

    Book(String ISBN) {
        this.ISBN = ISBN;
    }
}

class KidsBook extends Book {
    String kidsVariable;
    KidsBook(String ISBN, String kidsVariable) {
        super(ISBN);
        this.kidsVariable = kidsVariable;
    }
}

建造商将是:

public KidsBook(ISBN isbn, Foo kidVariable) {
   super(isbn);
   this.kidVariable = kidVariable;
}
现在,您正在将
isbn
参数从
KidsBook
的构造函数传递到其超类的构造函数。该超类的构造函数是:

public Book(ISBN isbn) {
   this.isbn = isbn;
}

最后,
isbn
实例变量(相当于,
this.isbn
)等于传递给KidsBook构造函数的原始
isbn

这里是另一个示例,希望澄清java继承的一些机制

public class Book
{
  protected String isbn;

  public Book(String isbn)
  {
    this.isbn = isbn;
  }

  public Book()
  {
    // isbn not set
  }
}

class DoubleIsbnBook extends Book
{
  private String isbn;

  public DoubleIsbnBook(String isbn)
  {
    super(); // could be commented out, since super class' constructor is implicitly called anyway
    super.isbn = isbn; // since Book's isbn is protected, it's visible at this point
    this.isbn = isbn.toUpperCase(); // here we set DoubleIsbnBook's isbn
  }

  public DoubleIsbnBook(String isbn1, String isbn2) {
    super(isbn1); // if Book's isbn was private this would be the only way to set Book's isbn
    this.isbn = isbn2;
  }
}

你所拥有的不是构造器,它怎么不是构造器呢@构造函数不能有返回类型。构造函数没有返回类型。对基构造函数的调用没有命名,它只是
super(ISBN)
。你有一个正常的方法。哎呀,总是忘记第一部分(返回类型)。第二本书是出于无知而写的(超级图书):P但是谢谢@kirk&@stack谢谢@stack!我担心这会引用它原来所在的类。同样,你在子类上覆盖的方法也是如此!OP询问,当在超类构造函数的上下文中时,这个指的是什么。正确的答案是它指的是超类,而不是子类(子类),因此是ISBN字段的超类版本,而不是子类版本。我刚刚意识到我问的问题有点毫无意义。因为this.ISBN仍然是kidBook类型对象的一部分:还是我错了?这意味着变量是对象的一部分,所以它指向哪个并不重要,对吗@kirk@stack@米克尔