如何正确使用"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 常规符号:变量名称应以小写字母开头。
我正在学习计算机科学中的继承 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 常规符号:变量名称应以小写字母开头。