' P '

whatever I will forget

Java ポリモーフィズム

まあ結局は各クラス(ベースクラスから継承済)にて同じメソッド名がある場合なんですね〜
呼び出し側を変えなくていい、というのはその通りか。
結局はそれぞれのクラスのオブジェクトを生成して、メソッドを呼び出す必要があるならばそこまで便利なのか、実感が湧きません。

package com.company;

import java.util.Scanner;

class Car {
    public String name;
    public int wheels;
    public boolean engine;
    public int cylinders;

    public Car(String name, int cylinders) {
        this.name = name;
        this.wheels = 4;
        this.engine = true;
        this.cylinders = cylinders;
    }

    public void startEngine() {
        System.out.println("car can start driving");
    }

    public String getName() {
        return name;
    }

    public int getCylinders() {
        return cylinders;
    }
}

class Polo extends Car {

    public Polo(String name, int cylinders) {
        super(name, cylinders);
    }

    @Override
    public void startEngine() {
        System.out.println("polo can start driving");
    }

}

class Golf extends Car {

    public Golf(String name, int cylinders) {
        super(name, cylinders);
    }

    @Override
    public void startEngine() {
        System.out.println("golf can start driving");
    }
}

class Beetle extends Car {

    public Beetle(String name, int cylinders) {
        super(name, cylinders);
    }

    @Override
    public void startEngine() {
        System.out.println("beetle can start driving");
    }
}

public class Main {

    public static void main(String[] args) {
        Car theCar = returnObj();
        theCar.startEngine();
        System.out.println(theCar.getName());
        System.out.println(theCar.getCylinders());
    }

    public static Car returnObj() {
        Scanner scanner = new Scanner(System.in);
        if (scanner.hasNextInt()) {
            switch(scanner.nextInt()){
                case 1:
                    return new Polo("polo", 4);
                case 2:
                    return new Golf("golf", 8);
                case 3:
                    return new Beetle("beetle", 12);
            }
            System.out.println("invalid option");
            scanner.close();
            return null;
        }
        System.out.println("invalid option");
        scanner.close();
        return null;
    }
}