无法理解 Java 继承

Can't understand Java inheritance

我正在学习 java 作为第一语言,所以我是一个完全的新手。 我现在正在研究 classes 之间的继承,有些地方我无法理解。我举个例子:

这是主要的class:

public class Bici {

protected int misura;
protected String modello;

public Bici(int misura, String modello)
{
this.misura=misura;
this.modello=modello;
}

public void stampaCaratteristiche()
{
System.out.println("Size is: "+misura);
System.out.println("Model is: "+modello);
System.out.println();
}
}

这是子class:

public class Tandem extends Bici {

private int ruote;

public Tandem (int ruote)
{
super(misura, modello);
this.ruote=ruote;
}

public void stampaCaratteristicheTandem()
{
System.out.println("Le ruote del tandem sono "+ruote);
}

}

但是当声明超级变量时我得到这个错误: "Cannot refer to an instance field modello while explicitly invoking a constructor"

为什么?谢谢!

  1. 您在 Bici class 中没有默认构造函数,这意味着在 Tandem class 中必须显式调用它。像这样:

    private int ruote;
    
    public Tandem (int ruote, int misura, String modello)
    {
    super(misura, modello);
    this.ruote=ruote;
    

    }

     public void stampaCaratteristicheTandem()
     {
     System.out.println("Le ruote del tandem sono "+ruote);
     }
    
  2. 超级class 构造函数必须在子class 构造函数之前执行。这样由 superclass 定义的状态和行为可以在 subclass 构造函数执行之前正确和完整地初始化。

Java 编译器假定每个构造函数的第一行是对默认 superclass 构造函数的隐式调用,除非您显式使用 super() 或 this()。

请注意,Super 关键字用于显式调用 superclass 构造函数。如果使用这种形式,它必须作为构造函数的第一条语句出现,以确保superclass构造函数在subclass构造函数

之前执行
  1. Java 继承机制不包括构造函数。换句话说,superclass 的构造函数不会被 subclass 继承。 Subclasses 仍然可以使用 super() 结构调用 superclass 中的构造函数。事实上,需要一个 subclass 构造函数来调用 superclass 中的一个构造函数,作为构造函数体内的第一个动作。您可能已经看到 Java classes,其中 subclass 构造函数似乎没有调用 superclass 中的构造函数。也许 superclass 甚至没有构造函数。然而,subclass 构造函数在那种情况下仍然调用了 superclass 构造函数。你只是看不到它。让我解释一下原因:

如果 class 没有定义任何显式构造函数,Java 编译器会插入一个隐式无参数构造函数。因此,class 总是有一个构造函数。

这是因为您不能在创建实例之前调用实例方法。顺便说一句,稍后可以在构造函数中调用实例方法。

这解决了您的问题:

public Tandem (int misura, String modello, int ruote){
     super(misura, modello);
     this.ruote=ruote;
}