Materi 6 Inheritance Niko Ibrahim, MIT Maranatha Christian University Like mother, like daughter... [common saying]
Today s Menu INHERITANCE Inheritance Specialization Extension Two kinds of relationship Example: aggregation Vs inheritance Protected scope Overriding methods Calling the superclass INHERITING FOR EVENT HANDLING Event handling in alibrary Event handling implementation Delegation Model
Inheritance Inheritance memungkinkan kita untuk mendefinisikan sebuah kelas yang bersifat umum, yang kemudian kita bisa definisikan kelas-kelas lain yang lebih khusus dengan cara menambahkan beberapa definisi tambahan kepada kelas umum tadi. Hal ini sangat efektif dan membantu para programmer, karena kelas khusus (child) tadi akan memiliki properties/method/variabel yang sama dengan kelas umum (parent) Kelas Umum (parent) BASE CLASS Kelas Khusus (child) DERIVED CLASS
Contoh Kasus Kita akan mendesain program penyimpanan data Student, Lecturer, dan Staff di sebuah fakultas. Ketiga entitas tersebut memiliki kesamaan dan dapat digolongkan menjadi satu kelas umum, yaitu Person Jadi, kita bisa katakan bahwa Student adalah subclass dari People Student pun bisa memiliki subclass lagi, yaitu Undergraduate dan Graduate
Hirarki Inheritance Person Student Employee Undergraduate Graduate Lecturer Staff Master PhD
Contoh Inheritance KELAS PERSON Kelas Person hanya memiliki property name Fungsinya sangat sederhana, yaitu memberikan nama seseorang Kelas Person disebut sebagai BASE CLASS KELAS STUDENT Kelas Student adalah subclass dari Person Kelas Student disebut sebagai DERIVED CLASS Derived Class adalah suatu kelas yang didefinisikan dengan cara menambahkan instance variable dan methods kepada kelas yang telah ada (Base Class)
Hirarki Kelas dalam UML Person - name: String + setname (String newname): void + getname ( ): String + writeoutput ( ): void + samename (Person otherperson): boolean Student - studentnumber: int + reset(string newname, int newstudentnumber): void + getstudentnumber( ): int + setstudentnumber (int newstudentnumber): void + writeoutput( ): void + equals(students otherstudent): boolean
Kelas Person public class Person{ private String name; public Person(){ name = "No name yet."; // Constructor public Person (String initialname){ name = initialname; public void setname(string newname){ name = newname; public String getname(){ return name; public void writeoutput(){ System.out.println("Name: " + name); public boolean samename(person otherperson){ return (this.name.equalsignorecase(otherperson.name));
Kelas Student public class Student extends Person menjadi base class { private int studentnumber; public Student(){ super(); Person studentnumber = 0; // extends Person, artinya: kelas Person // Constructor // Super(): memanggil Constructor parent-nya, yaitu public Student(String initialname, int initialstudentnumber){ super(initialname); studentnumber = initialstudentnumber; public void reset(string newname, int newstudentnumber){ setname(newname); studentnumber = newstudentnumber; public int getstudentnumber(){ return studentnumber; public void setstudentnumber(int newstudentnumber){ studentnumber = newstudentnumber; public void writeoutput(){ System.out.println("Name: " + getname()); System.out.println("Student Number: " + studentnumber); public boolean equals(student otherstudent){ return (this.samename(otherstudent) && (this.studentnumber == otherstudent.studentnumber));
DEMO PERSON STUDENT public class InheritanceDemo{ public static void main (String[] args){ Student s = new Student(); s.setname("warren Peace"); s.setstudentnumber(1234); s.writeoutput(); HASIL: Name: Warren Peace Student Number: 1234
Sintaks Umum untuk Inheritance public class Derived_Class_Name extends Base_Class_name { Declaration_of_added_Instance_variable Delcaration_of_added_and_overriden_methods
Contoh lain (Praktikum 1: Sun Rise)
Overidding kelas Shape
Overriding Method Definitions Pada kelas Student, kita menambahkan sebuah method dengan nama writeoutput yang tidak memiliki parameter. Namun, kelas Person pun memiliki method dengan nama yang sama writeoutput dan tanpa parameter pula. Java memiliki aturan sbb: Apabila derived class memiliki method yang sama persis (nama, jumlah parameter, & tipe parameter-nya) dengan base class, maka method derived class akan menimpa (override) method di base class. Jadi pada saat program membaca kode: s.writeoutput( ); Maka, method writeoutput( ) yang dibaca adalah yang kepunyaan kelas Student
Two Kinds Of Relationship Hubungan antar kelas sebenarnya bisa digolongkan menjadi dua jenis: Is_a (perlu menggunakan keyword extends) Has_a (tidak perlu menggunakan keyword extends) Contoh hubungan Is_a : Student is a Person, artinya seorang Student adalah Person. Namun, seringkali kita memerlukan hubungan yang bukan is a Misalnya: kelas Student memiliki kelas Date yang berguna sebagai tanggal enrollment. Jelas bahwa Student is not a Date Sehingga kita perlu menggunakan hubungan has a, jadi Student has a Date Caranya adalah dengan menambahkan sebuah instance variable bertipe Date di kelas Student. Tidak perlu menggunakan keyword extends. Contoh lain adalah: Clock memiliki ClockFace ClockFace memiliki ClockHand
Two Kinds Of Relationship Aggregation (composition) Class B uses Class A Class B has a Class A Class B is a client of Class A Class A is a supplier to Class B Inheritance (extension) Class B extends Class A Class B is a subclass of Class A Class A is a superclass of Class B Panduan: Is_a or Has_a? What kind of relationship? How does a new class relate to another? Try asking is a or has a " "Has a" - use aggregation "Is a" - use inheritance
Is_a atau has_a? Aggregation: Has_a a dog has_a tail a car has_a wheel (or 4) a student has_an ID number a rectangle has_a color a client has_a supplier an aggregate has_a component Inheritance: Is_a a dog is_an animal a car is_a vehicle a student is_a person a rectangle is_a geometric shape a subclass is_a superclass an extending class is_a base class