Pewarisan Tunggal dan Bertingkat
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 25 dari 87.
Sejauh ini, kita telah melihat class yang mewarisi satu class induk secara langsung. Namun, pewarisan dapat membentuk struktur yang berbeda, bergantung pada hubungan antarkelas. Mari kita jelajahi dua pola utama: pewarisan tunggal dan pewarisan multitingkat.
Pewarisan tunggal adalah yang selama ini kita gunakan. Sebuah class mewarisi tepat satu class induk secara langsung:
public class Animal { }
public class Dog extends Animal { }
public class Cat extends Animal { }Di sini, Dog dan Cat sama-sama mewarisi Animal, tetapi keduanya tidak saling mewarisi. Setiap turunan memiliki satu parent langsung.
Pewarisan multilevel membuat rantai ketika suatu class mewarisi class lain, yang juga mewarisi class lainnya:
public class Animal {
public void eat() {
System.out.println("Eating");
}
}
public class Mammal extends Animal {
public void breathe() {
System.out.println("Breathing");
}
}
public class Dog extends Mammal {
public void bark() {
System.out.println("Barking");
}
}Dalam rantai ini, Dog mewarisi Mammal, yang mewarisi Animal. object Dog memiliki akses ke semua method dari seluruh rantai:
Dog dog = new Dog();
dog.eat(); // Dari Animal
dog.breathe(); // Dari Mammal
dog.bark(); // Dari DogIngat bahwa Object berada di puncak setiap rantai. Jadi, Dog kita sebenarnya memiliki empat tingkat: Object -> Animal -> Mammal -> Dog. Perantaian konstruktor mengalir melalui semua tingkat ini saat membuat object baru.
Tantangan
MudahMari buat hierarki transportasi yang menunjukkan pola pewarisan tunggal dan bertingkat. Kamu akan membuat rangkaian class, setiap tingkat menambahkan kemampuan baru, untuk menunjukkan bagaimana method diwariskan melalui beberapa tingkat.
Kamu akan mengatur kodemu dalam empat file:
Vehicle.java: Buat class dasar di tingkat teratas hierarkimu. Setiap kendaraan harus memiliki:- Field private untuk
brand(String) - Konstruktor yang menerima brand
- Method
getBrand()yang mengembalikan brand - Method
move()yang mencetak:[brand] is moving
- Field private untuk
LandVehicle.java: Buat class yang memperluas Vehicle, yang mewakili tingkat tengah dalam rangkaian pewarisan bertingkatmu. Kendaraan darat menambahkan perilaku khusus untuk di darat:- Field private untuk
wheels(int) - Konstruktor yang menerima brand dan wheels, menggunakan
super(brand)untuk bagian parent - Method
getWheels()yang mengembalikan jumlah roda - Method
honk()yang mencetak:[brand] honks!
- Field private untuk
Car.java: Buat class yang memperluas LandVehicle, untuk melengkapi rangkaian pewarisan tiga tingkatmu. Mobil menambahkan fitur khususnya sendiri:- Field private untuk
model(String) - Konstruktor yang menerima brand, wheels, dan model, menggunakan
super(brand, wheels) - Method
getModel()yang mengembalikan model - Method
displayInfo()yang mencetak:[brand] [model] with [wheels] wheels
- Field private untuk
Main.java: Tunjukkan bagaimana object Car dapat mengakses method dari ketiga tingkat hierarki. Kamu akan menerima tiga input: brand (String), wheels (int), dan model (String). Buat Car dan panggil method berikut secara berurutan:move()- diwarisi dari Vehicle (grandparent)honk()- diwarisi dari LandVehicle (parent)displayInfo()- didefinisikan di Car itu sendiri
Kamu akan menerima tiga input: nama brand, jumlah roda, dan nama model.
Output-mu harus menampilkan tiga baris yang menunjukkan bagaimana object Car dapat menggunakan method dari setiap tingkat dalam rangkaian pewarisannya, mulai dari Vehicle di tingkat teratas hingga class-nya sendiri!
Coba sendiri
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Baca input
String brand = scanner.nextLine();
int wheels = scanner.nextInt();
scanner.nextLine(); // lewati karakter baris baru
String model = scanner.nextLine();
// TODO: Buat object Car dengan nilai input
// TODO: Panggil move(), diwarisi dari Vehicle (class kakek)
// TODO: Panggil honk(), diwarisi dari LandVehicle (class induk)
// TODO: Panggil displayInfo(), didefinisikan di class Car sendiri
}
}
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