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