class dan method abstrak
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 32 dari 87.
Terkadang kamu ingin mendefinisikan class yang berfungsi sebagai cetak biru, tetapi tidak boleh dibuat instance-nya secara langsung. Contohnya, class Shape generik cocok menjadi parent, tetapi seperti apa "shape" tanpa bentuk tertentu? Di sinilah class abstrak digunakan.
abstract class dideklarasikan dengan kata kunci abstract dan tidak dapat dibuat menjadi instance. Class ini dapat berisi method biasa dengan implementasi dan abstract method yang tidak memiliki isi:
public abstract class Shape {
protected String color;
public Shape(String color) {
this.color = color;
}
// Method abstrak, tanpa implementasi
public abstract double getArea();
// Method biasa, memiliki implementasi
public String getColor() {
return color;
}
}Method abstrak menyatakan apa yang harus dilakukan subclass, tetapi bukan bagaimana caranya. Setiap class non-abstrak yang memperluas class abstrak harus menyediakan implementasi untuk semua method abstrak:
public class Circle extends Shape {
private double radius;
public Circle(String color, double radius) {
super(color);
this.radius = radius;
}
@Override
public double getArea() {
return Math.PI * radius * radius;
}
}Kamu tetap bisa menggunakan abstract class sebagai tipe referensi, sehingga polimorfisme dapat digunakan:
Shape shape = new Circle("red", 5.0);
System.out.println(shape.getArea()); // Memanggil implementasi CircleClass abstrak cocok digunakan saat subclass berbagi kode umum, tetapi masing-masing harus menerapkan perilaku tertentu dengan cara yang berbeda. Class abstrak menetapkan kontrak sekaligus memungkinkan penggunaan kembali kode.
Tantangan
MudahMari kita buat sistem peralatan rumah tangga yang menunjukkan keunggulan abstract class. Kamu akan membuat class dasar Appliance yang menetapkan hal-hal yang harus dilakukan setiap peralatan rumah tangga, sementara jenis peralatan tertentu dapat menentukan cara melakukannya.
Kamu akan mengatur kodemu dalam empat file:
Appliance.java: Buat abstract class yang menjadi cetak biru untuk semua peralatan rumah tangga. Setiap peralatan rumah tangga memiliki fieldbrand(String) dan fieldwattage(int). Sertakan constructor yang menginisialisasi kedua field, getter method untuk masing-masing field, dan method biasagetInfo()yang mengembalikan:[brand] - [wattage]W. Definisikan abstract methodoperate()yang harus diimplementasikan oleh subclass. Method ini menggambarkan cara setiap peralatan rumah tangga menjalankan fungsi utamanya.WashingMachine.java: Buat class konkret yang memperluas Appliance. Mesin cuci memiliki field tambahancapacity(int) yang menunjukkan ukuran muatan dalam kg. Gunakansuperuntuk menangani inisialisasi class induk. Implementasikan methodoperate()untuk mencetak:[brand] washing machine is washing [capacity]kg of clothesMicrowave.java: Buat class konkret lain yang memperluas Appliance. Microwave memiliki fieldpower(int) yang menunjukkan persentase tingkat daya. Implementasikanoperate()untuk mencetak:[brand] microwave is heating at [power]% powerMain.java: Satukan semuanya menggunakan polimorfisme. Kamu akan menerima lima input: nama brand, wattage, kapasitas mesin cuci, nama brand lain, dan tingkat daya microwave. Buat WashingMachine dan Microwave, lalu simpan keduanya dalam array berisi referensiAppliance. Lakukan perulangan melalui array tersebut dan untuk setiap peralatan rumah tangga, cetak informasinya menggunakangetInfo(), lalu panggiloperate().
Kamu akan menerima lima input dengan urutan berikut: brand pertama (String), wattage pertama (int), kapasitas dalam kg (int), brand kedua (String), dan tingkat daya (int).
Output harus menampilkan empat baris. Untuk setiap peralatan rumah tangga, kamu akan melihat baris informasinya, lalu perilaku operasinya. Perhatikan bagaimana abstract class memungkinkanmu memperlakukan berbagai peralatan rumah tangga secara seragam, sementara masing-masing beroperasi dengan cara yang unik!
Coba sendiri
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Baca input
String brand1 = scanner.nextLine();
int wattage1 = scanner.nextInt();
int capacity = scanner.nextInt();
scanner.nextLine(); // lewati karakter baris baru
String brand2 = scanner.nextLine();
int power = scanner.nextInt();
// TODO: Buat object WashingMachine dengan brand1, wattage1, dan capacity
// TODO: Buat object Microwave dengan brand2, wattage1 (atau wattage yang sesuai), dan power
// TODO: Buat array referensi Appliance dan simpan kedua object
// TODO: Lakukan perulangan pada array dan untuk setiap appliance:
// - Tampilkan informasinya menggunakan getInfo()
// - Panggil operate()
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem PembayaranLatihan sendiri: Compiler Java online