Date post: | 28-Nov-2023 |
Category: |
Documents |
Upload: | independent |
View: | 0 times |
Download: | 0 times |
Kompetensi• Setelah membaca modul ini
mahasiswa dapat:– Mendefinisikan overloaded methods dan
constructors– Mendefinisikan static methods dan static
atribut – Mengorganisasi kelas dalam suatu paket
(package)
Overloading Methods• Dalam Java, dimungkinkan dua atau lebih method dalam kelas yang
sama memiliki nama sama, tetapi harus memiliki parameter yang berbeda.
• Kasus seperti tersebut disebut dengan overload dan method dikatakan saling overloading.
• Metod overloading adalah salah satu cara untuk mengimplementasikan sifat polymorfisme.
• Ketika method yang overloading dipanggil, maka Java akan menggunakan method yang sesuai dengan argumen seperti saat dipanggil.
• Method overload harus memiliki tipe dan jumlah parameter yang berbeda.
• Jika dua method overload memiliki tipe pengembalian nilai / return yang berbeda, hal ini tidak mampu membedakan menjadi dua versi method yang dianggap saling berbeda.
Contoh Overloading• Untuk pemanggilan method yang overload, kita
perlu mengetahui jumlah parameter formal dan tipe setiap parameter formal tersebut. Informasi ini disebut signature method.
• Signature method tidak termasuk nama parameter.
• Contoh method overload yang sudah disediakan Java adalah method println dari System.out. Method ini memiliki signature yang berbeda :
println(int) println(double) println(String) println(char)
println(boolean) println()
• .
// Demonstrate method overloading.
class OverloadDemo {void test() {
System.out.println("No parameters");}// Overload test for one integer parameter.void test(int a) {
System.out.println("a: " + a);}// Overload test for two integer parameters.void test(int a, int b) {
System.out.println("a and b: " + a + " " + b);}// overload test for a double parameterdouble test(double a) {
System.out.println("double a: " + a);return a*a;
}
}
class Overload {public static void main(String args[]) {
OverloadDemo ob = new OverloadDemo();double result;// call all versions of test()ob.test();ob.test(10);ob.test(10, 20);result = ob.test(123.2);System.out.println("Result of ob.test(123.2): " + result);
}}
ResultNo parametersa: 10a and b: 10 20double a: 123.2Result of ob.test (123.2): 15178.24
• Versi yang pertama tidak memiliki parameter, sedangkan yang kedua menggunakan parameter integer, yang ketiga menggunakan dua parameter integer yang keempat menggunakan satu parameter double.
• Pada versi test() yang keempat mengembalikan nilai, tetapi hal ini tidak mempengaruhi dalam membedakan method overload.
Overloading Process• Ketika method overload dipanggil,
Java akan mencari method yang memiliki argumen yang sesuai dengan parameter.
• Tetapi, terkadang ada ketidakcocokan.
• Maka dalam beberapa kasus, terjadi konversi tipe yang diperlukan untuk method yang overload.
Overload & Type Conversion// Automatic type conversions apply to overloading.class OverloadDemo {
void test() {
System.out.println("No parameters");}// Overload test for two integer parameters.void test(int a, int b) {
System.out.println("a and b: " + a + " " + b);
}// overload test for a double parametervoid test(double a) {
System.out.println("Inside test(double) a: " + a);
}}
class Overload {public static void main(String args[]) {
OverloadDemo ob = new OverloadDemo();int i = 88;ob.test();ob.test(10, 20);ob.test(i); // this will invoke test(double)ob.test(123.2); // this will invoke test(double)
}}No parametersa and b: 10 20Inside test(double) a: 88Inside test(double) a: 123.2
Process of Conversion• Seperti yang kita lihat, dalam OverloadDemo tidak
mendefinisikan test(int). • Maka ketika test(int) dipanggil, tidak ada
method yang sesuai, tetapi Java secara otomatis mengkonversi integer tersebut ke double sehingga terselesaikan masalah tersebut.
• Java akan melakukan proses konversi tipe secara otomatis hanya jika tidak ada parameter yang cocok, dan ditemukan method yang dapat disesuaikan.
Constructor Overloading 13
Constructor Overloading
• Method Constructor juga dimungkinkan untuk mengalami overload
• Kita dapat membuat obyek dari sebuah class dengan nilai awal yang berbeda-beda.
14
package TimoSoft;
public class MyClass{ int x; MyClass() { System.out.println("Inside MyClass()
constructor."); x=0; } MyClass(int i) { System.out.println("Inside MyClass(int)
constructor."); x=i; }}
Constructor Overloading 15
MyClass(double d) { System.out.println("Inside MyClass(double)
constructor."); x=(int)d; } void getXvalue() { System.out.println("The value of the instance
variable \n of the object " +this+" is "+x+"."); }}
Constructor Overloading 16
package TimoSoft;
public class MyClassTest{ public static void main(String[] args) { MyClass first=new MyClass(); MyClass second=new MyClass(52); MyClass third=new MyClass(13.6); first.getXvalue(); second.getXvalue(); third.getXvalue(); }}
Constructor Overloading 17
run:Inside MyClass() constructor.Inside MyClass(int) constructor.Inside MyClass(double) constructor.The value of the instance variable of the object TimoSoft.MyClass@19821f is 0.The value of the instance variable of the object TimoSoft.MyClass@addbf1 is 52.The value of the instance variable of the object TimoSoft.MyClass@42e816 is 13.BUILD SUCCESSFUL (total time: 1 second)
Constructor Overloading 18
• Salah satu keuntungan constructor yang dapat overload adalah memungkinkan sebuah obyek untuk menginisialisasi yang lain.
Reason for overloaded constructor
Constructor Overloading 19
package TimoSoft;
public class MyClass{ int x, y; MyClass() { System.out.println("Inside MyClass()
constructor."); x=0; y=0; } MyClass(int i, int j) { System.out.println("Inside MyClass(int)
constructor."); x=i; y=j; }}
Constructor Overloading 20
MyClass(MyClass obj) { System.out.println("Inside MyClass(MyClass)
constructor."); x=obj.x; y=obj.y; } void getXYvalues() { System.out.println("The value of the instance
variables \n of the object " +this+" are "+x+" and "+y+"."); }}
Constructor Overloading 21
package TimoSoft;
public class MyClassTest{ public static void main(String[] args) { MyClass first=new MyClass(); MyClass second=new MyClass(52, 18); MyClass third=new MyClass(second); first.getXYvalues(); second.getXYvalues(); third.getXYvalues(); }}
22
run:Inside MyClass() constructor.Inside MyClass(int) constructor.Inside MyClass(MyClass) constructor.The value of the instance variables of the object TimoSoft.MyClass@19821f are 0 and 0.The value of the instance variables of the object TimoSoft.MyClass@addbf1 are 52 and 18.The value of the instance variables of the object TimoSoft.MyClass@42e816 are 52 and 18.BUILD SUCCESSFUL (total time: 1 second)
Kata kunci this• Kata kunci this disebut self-referencing pointer
(penunjuk yang menunjuk ke dirinya sendiri) karena ia menunjuk ke diri objek itu sendiri.
: Object
this
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 7 - 25
Penggunaan this untuk Merujuk ke Data Member• this dapat digunakan untuk memanggil suatu
metode yang menerima objek• This dapat juga digunakan juga untuk merujuk ke
data memberclass Person {
int age;
public void setAge(int val) { this.age = val;}. . .
}
OVERLOAD
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 7 - 26
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 7 - 27
Overloaded Methods• 2 atau lebih metode dapat memiliki nama yang sama
asalkan– Mereka memiliki jumlah parameter yang berbeda
(Aturan 1) atau– Parameternya memiliki tipe yang berbeda jika
jumlahnya sama (Aturan 2)public void myMethod(int x, int y) { ... }public void myMethod(int x) { ... } Aturan 1
public void myMethod(double x) { ... }public void myMethod(int x) { ... } Aturan 2
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 7 - 28
Overloaded Constructor• Aturan yang sama berlaku juga untuk
metode konstruktor – Oleh karena itu kita dapat mendefinisikan
lebih dari 1 konstruktor dalam satu kelas
public Person( ) { ... }public Person(int age) { ... } Aturan 1
public Pet(int age) { ... }public Pet(String name) { ... } Aturan 2
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 7 - 29
Konstruktor dan this• Untuk
memanggil suatu konstruktor dari konstruktor lain dalam kelas yang sama, digunakan kata kunci this.
public Fraction( ) { //creates 0/1 this(0,1);}
public Fraction(int number) { //creates number/1 this(number, 1);}
public Fraction(Fraction frac) { //copy constructor this(frac.getNumerator(), frac.getDenominator());}
public Fraction(int num, int denom) { setNumerator(num); setDenominator(denom);}
Metode / variable static• Kata kunci static digunakan untuk
mendefinisikan metode milik suatu kelas
public static int gcd(int m, int n) { //the code implementing the Euclidean algorithm}
public static Fraction min(Fraction f1, Fraction f2) {
//convert to decimals and then compare
}
Metode / variable static• Dengan kata kunci static, maka jika
kita memanggil method tidak perlu membuat instance dari kelas.
• Maka method main adalah static
public static void main(String [] args)
Version 9/10 33
Static Fo to Co Convert Examplepublic class FtoC{
public static double convert( double degreesF ) { return 5.0 / 9.0 * (degreesF – 32 ); }
}
public class F2CDemo{
public static void main( String[ ] args ){
double degreesF = 100;
// Since convert is static, no object is needed// The class name is used when convert is called
double degreesC = FtoC.convert( degreesF );System.out.println( degreesC );
}}
Metode / variable static• Anggota class yang bersifat static ini
sering disebut dengan “class members” (class variable dan class methods).
• Class variable bersifat milik bersama dalam arti semua instance/obyek dari class yang sama akan mempunyai class variable milik bersama.
• Class variable mirip dengan global variable.
Output:• Objek c1• serial number : 1• counter : 1
• Objek c1 setelah create object c2• serial number : 1• counter : 2
• Objek c2• serial number : 2• counter : 2
Mengorganisasi Kelas dalam Paket (Package)
• Jika kelas A akan menggunakan kelas B, file kedua kelas tersebut harus berada dalam direktori/folder yang sama.– Hal ini tidak praktis jika kita ingin untuk
mendaur ulang kelas dalam program yang berbeda
• Agar dapat mendaur ulang kelas yang dibuat oleh programmer, tempatkan kelas-kelas yang akan didaur ulang dalam suatu package.
• Suatu package dalam Java adalah suatu class library.
Membuat Package• Langkah berikut mengilustrasikan
pembuatan suatu package bernama myutil yang melibatkan kelas Fraction.1. Include kan perintah
package myutil; sebagai perintah pertama dalam kelas Fraction .2. Deklarasi kelas harus memiliki visibility modifier public sbb
public class Fraction { ...}
3. Buat folder bernama myutil, nama yang sama dengan nama package. Dalam Java, package harus berkorespondensi satu-satu dengan folder.
4. Tempatkan kelas Fraction yang telah dimodifikasi dalam folder myutil dan compile
5. Sesuaikan CLASSPATH sehingga memuat folder yang berisi folder myutil .