如何正确使用"扩展"?

时间:2017-06-14 15:07:48

标签: java inheritance extends

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

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

分配要求我们创建Web商店具有以下附加属性:Internet地址和编写网站的编程语言。编写新类的构造函数和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:错误:构造函数Store类中的Store不能应用于给定的类型; { ^   必需:字符串   发现:没有争论   原因:实际和正式的参数列表长度不同

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

4 个答案:

答案 0 :(得分:4)

这实际上是一个非常简单的修复方法。您必须在 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); mywebview=(WebView)findViewById(R.id.abc); WebSettings webSettings=mywebview.getSettings(); webSettings.setJavaScriptEnabled(true); mywebview.loadUrl(getIntent().getStringExtra("data")); // ^^^^^ mywebview.setWebViewClient(new WebViewClient()); } 课程中加入super()来电。我建议您将WebStore构造函数更改为以下内容:

WebStore

这必须在Java中完成,因为如果扩展具有构造函数的类,则必须使用所需的参数调用public WebStore(String name, String Link, String Lang) { super(name); this.Link = Link; this.Lang= Lang; }

答案 1 :(得分:2)

您的WebStore必须有一个名字。因此,当您构建它时,您必须传递一个名称:public WebStore(String Link, String Lang, String name)

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

想象一下,建造一座更大的建筑物:你的Store代表基础,WebStore是一个满堂红。通过调用super(...);,您可以确保构建对象的“骨架”。

最后,你将拥有:

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

另外,您应该考虑遵循Java常规符号:变量名称应以小写字母开头。

答案 2 :(得分:1)

在扩展Store时,需要调用Store构造函数,在这种情况下需要提供商店名称。

在java中,您可以使用super(),

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

答案 3 :(得分:-1)

在Java中,构造函数始终调用其父级构造函数。 无参数构造函数通常称为“默认构造函数”。

您的[-2,-2,1,6,9,9] 类只有一个构造函数,它有一个agrument:Store。 因此,您的name构造函数应该调用其父级构造函数,为WebStore提供值。像这样:

name