在java中访问超类

时间:2011-05-12 22:16:23

标签: java

我是否正确使用超类来访问titleminutesprice

 public class Video extends CollectionItem
    {

      public Video(String title, 
          int minutes, double price) {

    super(title,minutes,price);

      }

      public String getTitle() {
        return super(title);
      }

      public int getMinutes() {
        return super(minutes);
      }

      public double getPrice() {
        return super(price);
      }

      public double pricePerMinute() {
        return 
            super(price)/super(minutes);
      }

}

这是我的超类你可以检查以确保我做的一切正确我是非常新的这个我做了研究我只是认为super()是正确的方式

Public class CollectionItem
{

  public String title;
    public int minutes;
    public double price;
    public int pages;


public Video(String title, 
      int minutes, double price) {

    this.title = title;
    this.minutes = minutes;
    this.price = price;
  }


public Book(String title, 
      int pages, double price) {

    this.title = title;
    this.pages = pages;
    this.price = price;
  }


public String getTitle() {
    return title;
  }

  public int getPages() {
    return pages;
  }

  public double getPrice() {
    return price;
  }

  public int getMinutes() {
    return minutes;
  }


}

3 个答案:

答案 0 :(得分:4)

不,你不是。

这取决于如何定义超类。如果price,minutes字段被定义为protected,那么您只需编写其名称即可访问它们。所以,

public int getPrice() { 
  return price;
}

更有可能的是,超类定义了一个公共getter方法,例如:

public int getPrice() {
  return price;
}

如果是这种情况,那么就不需要在子类中定义类似的方法,因为超类的方法是由子类继承的。

答案 1 :(得分:3)

不,这不是使用super的正确方法。尝试

public class Video extends CollectionItem {

  public Video(String title, 
      int minutes, double price) {

    super(title,minutes,price);

  }

  public String getTitle() {
    return super.getTitle();
  }

  ...

}

我假设i)CollectionItem定义getTitle()方法,ii)CollectionItem存储构造函数中传递的值。

在这种情况下,也没有必要在getTitle()类中覆盖Video。您可以依赖CollectionItem中仅使用this.getTitle()定义的那个。

如果标题在CollectionItem中受到保护,您可以使用super.title;获得标题。

答案 2 :(得分:3)

通常,您使用super的方式与使用this的方式相同。因此,要访问名为“foo”的超类中的某些内容,请说super.foo。你在调用构造函数时唯一一次说super(...)(就像this(...)语法一样,这只能作为构造函数中的第一个语句)。