好的,所以这一直在搞乱我。 (双关语?)
忽略变量类型,因为这不是问题
假设您有一个父类,例如一个具有可变ISBN的书类。构造函数使用this.ISBN = bla
设置ISBN。
现在有一个儿童班。它有一个构造函数,可以调用其中的父元素。首先,构造者是如何形成的?像这样? :
public kidsBook(ISBN, kidVariable) {
super(ISBN);
this.kidVariable = kidVariable;
}
这是正确的方法吗?如果是这样就提出了第二个问题:来自父类的this.ISBN,当在子构造函数中调用父类的构造函数时,this关键字是否引用了孩子的ISBN版本?
这让我很困惑,我打赌我写的方式显示了黑桃的混乱。
编辑:修复了与问题无关的代码错误。
答案 0 :(得分:3)
你走在正确的轨道上。你的问题的答案是肯定的,是的。
使用正确的语法
,这是完整代码的样子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;
}
}
答案 1 :(得分:0)
构造函数将是:
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
。
答案 2 :(得分:0)
这是另一个希望澄清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;
}
}