如何正确使用"extends"?

How to properly use "extends"?

我正在学习计算机科学中的继承 class。 我也很困惑为什么我的代码不起作用。 这是教授提供的代码:

public class Store{

public final double SALES_TAX_RATE = 0.05;
private String name;

 public Store(String name){
  setName(name);
   }
   public String getName(){
  return name;
  }
   public void setName(String name){
  this.name = name;
   }

   public String toString(){
     return "Name: "+ name;
   }
   }

要求我们创建网上商店的作业具有以下附加属性:互联网地址和编写网站所用的编程语言。编写新 class.

的构造函数和 toString 方法

这正是我所做的,但是我的代码不起作用:

public class WebStore extends Store
{

 String Link;
 String Lang;

 public WebStore(String Link, String Lang)
 {
 this.Link = Link;
  this.Lang= Lang;
   }

  public void setLink( String Address )
     {
  Link = Address;  
     } 

  public String getLink()
     {
  return Link;
     } 

 public void setLang( String Language )
     {
  Lang = Language;  
     } 
public String getLang()
     {
  return Lang;
     }    
}

这是我收到的错误: WebStore.java:9: 错误:class 中的构造函数存储不能应用于给定类型; { ^ 必填:字符串 发现:没有参数 原因:实际和形式参数列表的长度不同

为什么我会收到此错误,我的代码看起来也应该如此?如果这是一个愚蠢的问题,我很抱歉,但我是 java

的新手

这实际上是一个非常简单的修复。您必须在 WebStore class 中包含一个 super() 调用。我建议您将 WebStore 构造函数更改为如下内容:

public WebStore(String name, String Link, String Lang) {
    super(name);
    this.Link = Link;
    this.Lang= Lang;
}

这必须在 Java 中完成,因为如果扩展具有构造函数的 class,则必须使用所需的参数调用 super()

当您扩展 Store 时,它​​需要调用 Store 构造函数,在本例中需要为其提供商店名称。

在java中,你可以调用superclass使用super(),

public WebStore(String name, String Link, String Lang)
{
  super(name);
  this.Link = Link;
  this.Lang= Lang;
}

在 Java 中,构造函数总是调用其父级的构造函数。 无参数构造函数通常称为 "default constructor".

您的 Store class 只有一个构造函数,并且它有一个参数:name。 因此,您的 WebStore 构造函数应该调用其父级的构造函数,为 name 提供值。像这样:

public WebStore(String Link, String Lang)
{
  super("name");
  this.Link = Link;
  this.Lang= Lang;
}

您的 WebStore 必须有一个名字。所以当你构造它时,你必须传递一个名字:public WebStore(String Link, String Lang, String name).

然后您可以使用 name 参数来调用父 class 的构造函数:super(name);。请注意,这必须是构造函数的第一条语句。

将扩展想象成建造更大的建筑物:您的 Store 代表地基,而 WebStore 代表满屋子。通过调用 super(...);,您确保已构建对象的 'skeleton'。

最后,您将拥有:

public WebStore(String Link, String Lang, String name)
{
    super(name); // construct the skeleton with this parameter!
    this.Link = Link;
    this.Lang= Lang;
}

附带说明一下,您应该考虑遵循 Java 常规符号:变量名称应以小写字母开头。