Java的继承

继承

通过继承,将现有类的字段和方法传递给另一个类。
新创建的继承类可以添加自己的字段和方法进行定制。
被继承的类称为“父类”,通过继承生成的新类称为“子类”。
在使用继承定义新的子类时,使用关键词“extends”进行类定义。

class サブクラス名 extends スーパークラス名 {
}

使用extends关键字可以继承父类,并指定父类名称。

我们假设Bicycle.java和Car.java的内容是重复的。

class Main {
  public static void main(String[] args) {
省略
 }
}
class Bicycle extends Vehicle {

}
class Car extends Vehicle{

}
class Vehicle {
省略  //Bicycle.javaとCar.javaの重複している部分
}

调用超类的方法

子类继承了父类的字段和方法。
可以对子类的实例调用父类的实例方法。
【例】继续上面的例子。

class Main {
  public static void main(String[] args) {
    Car car = new Car();
    car.setName("フェラーリ");  //carの名前を指定してます
    car.setColor("赤");  //carの色を指定してます

    Bicycle bicycle = new Bicycle();
    bicycle.setName("ビアンキ");  //bicycleの名前を指定してます
    bicycle.setColor("緑");  //bicycleの色を指定してます

    System.out.println("【車の情報】");
    car.printData();

    System.out.println("=================");
    System.out.println("【自転車の情報】");
    bicycle.printData();
  }
}

子类的字段和方法

子类的实例可以调用自己类中定义的方法和父类中的方法。
而父类的实例不能调用子类的方法。
对于子类的实例,如果调用的方法在子类中有定义,则从子类调用;如果没有定义,则从父类调用。
【例】接下来延续上述例子。

class Main {
  public static void main(String[] args) {
    Car car = new Car();
    省略
    int litre = scanner.nextInt();
    car.charge(litre);
    省略
    bicycle.printData();
  }
}
class Car extends Vehicle{
  public void charge(int litre) {
    System.out.println(litre + "L給油します");
    if (litre <= 0) {
      System.out.println("給油できません");
    } else if (litre + this.fuel >= 100) {
      System.out.println("満タンまで給油します");
      this.fuel = 100;
    } else {
      this.fuel += litre;
    }
    System.out.println("ガソリン量:" + this.fuel + "L");
  }
}

覆盖

通过在子类中定义一个与从超类继承的方法同名的方法,可以覆盖超类方法的内容,这称为”覆写”。
当调用子类实例的方法时,首先在子类内部查找该方法,如果存在,则调用该方法。
也就是说,如果子类有与超类同名的方法,那么该方法会被执行,结果就是方法的内容被覆盖。
【例】继续上述例子

class Car extends Vehicle{
  public void charge(int litre) {

  public void printData() {
  System.out.println("名前:" + this.getName());
  System.out.println("色:" + this.getColor());
  System.out.println("走行距離:" + this.getDistance() + "km");
  System.out.println("ガソリン量:" + this.getFuel() + "L");
  }
省略
}

省略了但覆盖了Vehicle.java的内容。
将重复的内容删除。
删除方法是使用”super.方法名()”。
使用”super.方法名()”可以从子类的实例方法中调用超类的实例方法。
【例】继续上述内容。

class Car extends Vehicle{
  public void charge(int litre) {

  public void printData() {
  super.printData();  //重複している部分を消しています
  System.out.println("ガソリン量:" + this.getFuel() + "L");  //こちらは重複していないとします
  }
省略
}

下一步,在子类中定义构造函数。
要调用超类的构造函数,请使用“super()”。
【例】继续上面的例子,使用“super()”来调用name和color。

class Bicycle extends Vehicle
  Bicycle(String name, String color) {  //Bicycleクラスのコンストラクタを定義しています
    super(name, color);   //superを用いてスーパークラスのコンストラクタを呼び出してます
  }
}
class Car extends Vehicle{

  Car(String name, String color) {
    super(name, color);
  }
省略
}
class Vehicle {
  private String name;
  private String color;
  private int distance = 0;

  Vehicle(String name, String color) { // Vehicleクラスのコンストラクタを定義しています
    this.name = name;
    this.color = color;
  }
省略
}
广告
将在 10 秒后关闭
bannerAds