CCCPaste

Polymorphism

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class Mahasiswa {
    String nama, nim;

    public Mahasiswa(String nama, String nim) {
        this.nama = nama;
        this.nim = nim;
    }

    void tugas() {
        System.out.println("Mahasiswa " + nama + " sedang belajar mandiri.");
    }
}

// Mahasiswa S1 dengan tambahan nilai skripsi dan nama kelas
class MahasiswaS1 extends Mahasiswa {
    int semester;
    double nilaiSkripsi;
    String namaKelas;

    public MahasiswaS1(String nama, String nim, int semester, double nilaiSkripsi, 
        String namaKelas) {
        super(nama, nim);
        this.semester = semester;
        this.nilaiSkripsi = nilaiSkripsi;
        this.namaKelas = namaKelas;
    }

    @Override
    void tugas() {
        System.out.println("Mhs S1 " + nama + ", semester " + semester +
                " dari kelas " + namaKelas +
                " sedang mengerjakan skripsi dengan nilai " + nilaiSkripsi);
    }
}

class MahasiswaS2 extends Mahasiswa {
    String bidangStudi;

    public MahasiswaS2(String nama, String nim, String bidangStudi) {
        super(nama, nim);
        this.bidangStudi = bidangStudi;
    }

    @Override
    void tugas() {
        System.out.println(nama + " sedang mengerjakan tesis pada bidang " + bidangStudi);
    }
}

class MahasiswaS3 extends Mahasiswa {
    String promotor;

    public MahasiswaS3(String nama, String nim, String promotor) {
        super(nama, nim);
        this.promotor = promotor;
    }

    @Override
    void tugas() {
        System.out.println(nama + ", promotor " + promotor + ", sedang mengerjakan disertasi.");
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        List daftarMahasiswa = new ArrayList<>();

        System.out.print("Berapa jumlah mahasiswa yang ingin diinput? ");
        int jumlah = sc.nextInt();
        sc.nextLine(); // bersihkan buffer

        for (int i = 1; i <= jumlah; i++) {
            System.out.println("\nData Mahasiswa ke-" + i);
            System.out.print("Nama: ");
            String nama = sc.nextLine();
            System.out.print("NIM: ");
            String nim = sc.nextLine();

            System.out.print("Jenjang (1=S1, 2=S2, 3=S3, lainnya=umum): ");
            int jenjang = sc.nextInt();
            sc.nextLine(); // bersihkan buffer

            switch (jenjang) {
                case 1:
                    System.out.print("Semester: ");
                    int semester = sc.nextInt();
                    sc.nextLine();
                    System.out.print("Nama Kelas: ");
                    String kelas = sc.nextLine();
                    System.out.print("Nilai Skripsi: ");
                    double nilai = sc.nextDouble();
                    sc.nextLine();
                    daftarMahasiswa.add(new MahasiswaS1(nama, nim, semester, nilai, kelas));
                    break;
                case 2:
                    System.out.print("Bidang Studi: ");
                    String bidang = sc.nextLine();
                    daftarMahasiswa.add(new MahasiswaS2(nama, nim, bidang));
                    break;
                case 3:
                    System.out.print("Nama Promotor: ");
                    String promotor = sc.nextLine();
                    daftarMahasiswa.add(new MahasiswaS3(nama, nim, promotor));
                    break;
                default:
                    daftarMahasiswa.add(new Mahasiswa(nama, nim));
            }
        }

        // Cetak Report
        System.out.println("\n=== REPORT MAHASISWA ===");
        for (Mahasiswa mhs : daftarMahasiswa) {
            mhs.tugas(); // polymorphism: method sesuai tipe objek
        }

        sc.close();
    }
}