这个关键字和继承 - Java

时间:2011-02-26 03:30:59

标签: java inheritance this

好的,所以这一直在搞乱我。 (双关语?)

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

假设您有一个父类,例如一个具有可变ISBN的书类。构造函数使用this.ISBN = bla设置ISBN。

现在有一个儿童班。它有一个构造函数,可以调用其中的父元素。首先,构造者是如何形成的?像这样? :

public kidsBook(ISBN, kidVariable) {
   super(ISBN);
   this.kidVariable = kidVariable;
}

这是正确的方法吗?如果是这样就提出了第二个问题:来自父类的this.ISBN,当在子构造函数中调用父类的构造函数时,this关键字是否引用了孩子的ISBN版本?

这让我很困惑,我打赌我写的方式显示了黑桃的混乱。

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

3 个答案:

答案 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;
  }
}