Object Oriented Programming With Java

Slides:



Advertisements
Presentasi serupa
Pemrograman Berorientasi Objek
Advertisements

Membuat class sendiri.
Kelas & Objek.
Other OOP Basic Viska Mutiawani, M.Sc. Konsep penting Method overloading Encapsulation this keyword final static.
Nur Hayatin, S.ST Jurusan Teknik Informatika Universitas Muhammadiyah Malang Sem Genap 2010.
Abstract Class & Interface
OBJECT ORIENTED PROGRAMMING in JAVA
Pemrograman JAVA (TIB09)
Workshop SCS: Java Game Programming
Pemrograman Berorientasi Objek
Inheritance Ery Setiyawan Jullev A.
Inheritance (Pewarisan)
Advanced Class 2 Pertemuan 11 Pemrograman Berbasis Obyek Oleh Tita Karlita.
Pemrograman Berbasis Obyek
Encapsulation, Inheritance, polymorphism, dan interface
Variabel, Method & Constructor Oleh : Nur Hayatin, S.ST Teknik Informatika – UMM 2011.
INHERITANCE, POLYMORPHISM, DAN INTERFACE
Inheritance (Pewarisan)
Pemrograman Berorientasi Obyek Oleh Tita Karlita
METHOD Object Oriented Programming with JAVA 2011/2012.
OBJECT ORIENTED PROGRAMMING YANES HARDIANTO SUI Politeknik Manufaktur Astra 2011.
Inheritance Nana Ramadijanti Laboratorium Computer Vision Politeknik Elekltronika Negeri Surabaya PENS-ITS 2009.
Diberikan pada Kuliah Sela Teknik Informatika - Universitas Muhammadiyah Malang Tahun 2011.
Object Oriented Programming with JAVA 2011/2012
Object Oriented Programming with JAVA 2011/2012
CLASS, OBJECT METHOD, PROPERTIES Object Oriented Programming
Inheritance Matakuliah : T0984 / Algoritma dan Metode Object Oriented Programming II Pertemuan : 4 Tahun : 2008 Versi : 1/0.
Inheritance, polymorphism, dan interface
Kelas Lanjut 2 Oleh Tita Karlita.
INHERITANCE (Oleh : Nur Hayatin, S.ST)
OOP Java Minggu 2b Dasar OOP. Class (1) Deklarasi class : [ *] class { [ *] } Cat : [] = optional, * = repeat 0-N.
Algoritma &Pemrograman 1
MATERI IV OOP (Object Oriented Programming) Chapter II.
Try, Catch, Finally Throws
Pertemuan 6 PEWARISAN AND POLYMORPHISM
Kelas A dapat memiliki referensi ke obyek dari kelas- kelas lain sebagai anggota. Kadang-kadang disebut sebagai hubungan “has-a”. Sebagai contoh, sebuah.
MEMBUAT KELAS SENDIRI Dewi Sartika, M.Kom.
Firman Asharudin | Pemrograman Lanjut
Class & Object Disusun Oleh: Reza Budiawan Untuk:
Access Modifier.
Inheritance dan Kata Kunci static
Inheritance (Pewarisan)
POLYMORPHISM (KEBANYAKRUPAAN)
Pertemuan 2 SINTAKS BAHASA, TIPE DATA, DAN OPERATOR
Encapsulation, Inheritance, Polymorphism
Pemrograman Berorientasi Object
Method & Constructor METHOD.
Constructor dan Overloading
POLYMORPHISM (KEBANYAKRUPAAN)
MODIFIER JAVA.
Association, Composition dan Inheritance
Tipe Data, Variabel, dan Operator
Class, Objek, data, variabel dan operator
Kelas & Objek.
Tipe Data, Variabel, dan Operator
Membuat Kelas.
Inheritance.
PBO Lanjutan Membuat Kelas.
Pemrograman Berorientasi Object
Array, Class, Obyek, Method danConstructor.
Dasar-dasar Pemrograman Objek dg Java
STUDI KASUS.
OOP ENKAPSULASI SMKN 2 SINGOSARI Kelas XI RPL.
ISTILAH-ISTILAH PENTING PEMROGRAMAN BERBASIS OBYEK
Konsep Bahasa Pemrograman I Konsep OOP
Array, Class, Obyek, Method danConstructor.
Tipe Data, Variabel, dan Operator
DPH1C4 Pemrograman berorientasi Obyek
FONDASI PEMROGRAMAN & STRUKTUR DATA #8
Bahasa Pemrograman (Pemrograman Visual)
Transcript presentasi:

Object Oriented Programming With Java By : Winzaldi EDI Indonesia Java Programmer

Konsep OOP

Intro OOP OOP adalah sebuah paradigma/cara pandang pemograman Salah satu cara untuk menggambarkan struktur dari aplikasi Paradigma selain OOP - Procedural,Functional dan lain-lain Sekarang OOP menjadi paradigma pemograman yang popular - Java - PHP 5 - C# - C++

Keuntungan OOP Reuseability - Once you written code, you can reuse it! Management - Aplikasi yang diprogram menggunakan kelas-kelas dan objek.objek- objek yang saling berkomuniskasi. Maintenance - ketika kita melakukan perubahan code, maka tidak akan mempengaruhi seluruh bagian dari aplikasi

Konsep Dasar : Objek Di dunia nyata, dunia terdiri atas objek-objek. - mobil-mobil,bangunan-bangunan,pepohonan,manusia, bunga dan lain- lain. Biasanya setiap objek mempunyai perilaku/aksi (fungsi-fungsi) yang mempengaruhi objek lain. - agus mengendarai bmw - objek agus mempengaruhi objek bmw. - agus.mengendarai(bmw); Dan Objek mempunyai atribut-atribut. - bmw mempunyai gears,warna,kaca spion dan lain-lain.

Contoh Objek Mobil BMW Mobil BMW memiliki bebarapa perilaku/aksi : - melaju - berhenti - tambah kecepatan” - dan lain-lain Mobil BMW memiliki informasi atau atribut-atribut. - warna,jumlah gears,jumlah pintu dan lain-lain.

Konsep Dasar : Kelas Kelas adalah sebuah blue print atau cetakan dari sebuah objek. Kelas menggambarkan state/atribut dan perilaku/aksi objek. Objek dibentuk dari Kelas

Contoh Kelas Jika BMW adalah Objek Maka Kelasnya adalah Mobil Jika kita ingin membuat objek BMW maka kita harus mempunyai blue print/ cetakan dari BMW Blue print/ Cetakan dari Objek : Mobil Kelas Mobil -> Objek BMW

Contoh : Kelas > Objek Mobil BMW Manusia Aldi Warna Kuning Laptop Acer String “pergi ke mall” Array {1,2,3,4} …….

Mobil Blueprint (Kelas) di UML merk mesin jumlahPintu warna jumlahRoda …

Kelas ke Objek datsun Mobil Datsun 100A 1.0 3 red merk 4 tipeMesin jumlahPintu warna jumlahRoda … lambo Lamborghini Diablo 8.0 3 red 4

Kelas dan Objek di Java

Kelas Orang > Objek Iwan Iwan Orang Mahmud 25 guru 021-12345 namaAwal namaAkhir umur pekerjaan noTelpon Makan() Tidur() minumTeh() Iwan Mahmud 25 guru 021-12345 makan tidur minumTeh Zaki zaki Hasan 30 Programmer Java 021-654321

Orang – Kelas > Java Orang namaAwal namaAkhir umur pekerjaan noTelpon makan tidur minumTeh class Orang { public String namaAwal; public String namaAkhir; public int age; public String pekerjaan; public String noTelpon; public void makan() { System.out.println(“Makan ..yummy!"); } public void tidur() { System.out.println(“Lagi Tidur!"); public void minumTeh() { System.out.println(“Minum Teh!");

Tes kelas orang.bisanya applikasi di mulai dari main-method class Orang { .... } class JustTesting { public static void main(String [] args) { // Declare the object Orang jack; // Initialize the object jack = new Orang(); jack.namaAwal = "Jack"; jack.namaAkhir = "Smith"; jack.minumTeh(); System.out.println(“nama : ” + jack.namaAwal);

Contoh: Kelas -Mobil class Mobil { public String merk; public int jumlahMinyak; public void jalan() { jumlahMinyak--; }

class Mobil { .... } class JustTesting { public static void main(String [] args) { Mobil datsun = new Mobil(); datsun.jumlahMinyak = 100; datsun.jalan(); System.out.println(datsun.jumlahMinyak); Mobil ferrari = new Mobil(); ferrari.jumlahMinyak = 300; ferrari.jalan(); System.out.println(ferrari.jumlahMinyak);

Konsep Dasar - Enkapsulasi private public method

Tentang Atribut Atribut-atribut biasa dibuat private Agar objek lain tidak bisa merubah sewenang-wenang Misalnya, Anda tidak ingin bahwa setiap benda di dunia bisa mengubah berat badan seseorang untuk 500kg

Contoh: Kelas Orang class Orang { private String nama; private int berat; }

class Orang { private String nama; private int berat; } class JustTesting { public static void main(String [] args) { Orang jack = new Orang(); jack.nama = "Jack Smith"; jack.berat = 500; RESULT: TB308POHJUS-L-2:temp pohjus$ javac Orang.java Orang.java:9: nama has private access in Orang ^ Orang.java:10: berat has private access in Orang 2 errors

class Person { private String nama; private int weight; public void setnama(String n) { nama = n; } public String getnama() { return nama; public void setWeight(int w) { if(w > 0 && w <= 150) weight = w; public int getWeight() { return weight; class JustTesting { public static void main(String [] args) { Person jack = new Person(); jack.setnama("Jack Smith"); jack.setWeight(200); System.out.println(jack.getnama());

Accessor and Mutator - methods class Orang { private String nama; private int berat; // Mutator public void setNama(String n) { nama = n; } // Accessor public String getNama() { return nama; public void setBerat(int w) { if(w > 0 && w <= 150) berat = w; public int getBerat() { return berat;

Tipe-tipe di Java

Tipe-tipe di Java Tipe-tipe di java 1) Primitive types byte, short, int, long, double, float, char, boolean 2) Class(Kelas) types String, Scanner, Array, JButton, JFrame ...

Perbedaanya Tipe2 primitif di tulis dg huruf kecil di awal: int, double, float... Tipe2 kelas di tulis dg huruf besar di awal String, Scanner, Person, Cat, Mobil ... Deklarasi dan inisialisasi int a = 5; Tipe Kelas deklarasi dan inisialisasi dengan new Orang iwan = new Orang();

Perbedaan Tipe Primitif Tipe Kelas b menampung alamat di memory int a = 5; Tipe Kelas int [] b= new int[5]; b menampung alamat di memory a menampung nilai 5.

Alamat di memory ? int [] b = new int[2]; b[0] = 1; b[1] = 2; // prints 0x01 System.out.println(b); RAM variabel b address value 0x09 0x01 address value 0x01 1 0x02 2

Alamat di memory? int [] b = new int[2]; b[0] = 1; b[1] = 2; int [] a = b; // prints 0x01 System.out.println(b); System.out.println(a); RAM variabel b variabel a address value 0x09 0x01 address value 0x19 0x01 address value 0x01 1 0x02 2

Output? int [] b = new int[2]; b[0] = 1; b[1] = 2; int [] a = b; b[0] = 99; // Output? System.out.println(a[0]);

Perbedaan Lagi Tipe Primitif Tipe Kelas b menampung alamat di memory int a = 5; Tipe Kelas int [] b= new int[5]; b menampung alamat di memory a menampung nilai 5.

Output? Orang jack = new Orang(); jack.setNama("Jack Smith"); Orang james = jack; james.setNama("James Bond"); // output? System.out.println(jack.getNama());

Methods and Variables public void method(int x) { x++; } public void main(String [] args) { int y = 3; method(y); // Output nya 3! System.out.println(y);

Methods and Variables public void method(int [] x) { x[0] = 12; } public void main(String [] args) { int [] y = {1,2,3}; method(y); // Output nya 12 karna array termasuk tipe kelas! System.out.println(y[0]);

* String String adalah sebuah pengecualian dari tipe kelas. String adalah tipe kelas yang perlakuannya seperti tipe primitif. String adalah tipe kelas yang hanya bisa di inisialisasi tanpa kata new. String a = "hello"; String di perlakukan sebagai passed by value di dalam method,sehingga String adalah copian ketika String dilewatkan di dalam method.

String dan Memori Variable string adalah objek=> manampung alamat di memori. Membandingkan isi dari variabel String a.equals(b); Membandingkan alamat di memori a == b

Constructor (Konstruktor)

Konstruktor Konstruktor adalah sebuah “init method” yang dipanggil ketika objek diciptakan. Java menyediakan default konstruktor tanpa parameter. Konstruktor mempunya nama yang sama dengan nama kelas. Konstruktor tidak mengembalikan apapun. hanya mempunyai access modifer, tidak ada keyword lain yang diletakkan sebelum nama method pada deklarasi constructor

Example class Mobil { public Mobil() { System.out.println(“Konstruktor!"); } class Test { public static void main(String [] args) { Mobil ferrary = new Mobil(); > java Test Konstruktor!

class Mobil { private String merk; public Mobil(String b) { merk = b; } public String getMerk() { return merk; class Test { public static void main(String [] args) { Mobil datsun = new Mobil("Datsun 100A"); System.out.println( datsun.getMerk() ); > java Test Datsun 100A

Multiple Konstruktor class Mobil { public Mobil() { // Do something } public Mobil(String merk) { // Do something else class Test { public static void main(String [] args) { Mobil datsun = new Mobil(); Mobil ferrari = new Mobil("Ferrari");

Masalah ? class Mobil { String merk; public Mobil(String merk) { merk = merk; } class Test { public static void main(String [] args) { Mobil datsun = new Mobil("Datsun 100a"); > java Test null

Solusi class Mobil { String merk; public Mobil(String merk) { this.merk = merk; } class Test { public static void main(String [] args) { Mobil datsun = new Mobil("Datsun 100a"); > java Test Datsun 100a

KOMPOSISI

Komposisi Hubungan antara objek-objek,dimana suatu objek memiliki objek lain. Dimana objek kedua tidak bisa berdiri sendiri tanpa objek pertama. Mobil memiliki Mesin Ketika kita mencipatkan Mobil,berarti kita juga mencipatkan mesin. Ketika Mobil di hancurkan berarti mesin juga di hancurkan.

Notasi UML Mobil Mesin

Java: Komposisi // Komposisi class Mobil { private Mesin mesin; public Mobil() { mesin = new Mesin(); }

One to Many (Satu ke Banyak)? Departemen 1..20 Professor

Java: One to Many class Departemen { private Professor [] anggota; private int jumlahAnggota; public Departemen(Professor prof) { anggota = new Professor[20]; anggota[0] = prof; jumlahAnggota = 1; } public void addProfessor(Professor prof) { anggota[jumlahAnggota] = prof; jumlahAnggota++;

Inheritance (Pewarisan)

Pengenalan Pewarisan Pewarisan adalah sebuah hubungan antara dua kelas atau lebih dimana devrived class (kelas turunan ) mewarisi perilaku-perilaku dan atribut-atribut dari base class (kelas dasar). Membantu untuk menggunakan kembali code yang telah ada dengan sedikit modifikasi atau tanpa modifikasi.

Inheritance Pewarisan dapat terus bersambung Example: Kelas Turunan dapat mewarisi kelas lain,dimana klas lain tsb mewarisi kelas lain dan seterusnya. Ketika terjadi perubahan pada kelas dasar maka semua kelas turunannya juga ikut berubah Example: Mamalia <– Manusia <– Pekerja <- Programmer

Gambaran tentang Pewarisan Class A Fitur : a,b Fitur: a,b,c d e Class C Fitur : a,b,d,e c Class B Fitur: a,b,d,e,f f Class D

Banyak Pewarisan (Multiple Inherit) Di banyak pewarisan,kelas turunan dapat mewarisi banyak kelas dasar C++ mendukung banyak pewarisan, di java tidak ada banyak pewarisan Pengendara - SIM Kondektur - Nama Anggota Rumah Perahu Rumah terapung Sopir Taxi - area

Pewarisan dan Enkapsulasi private Hanya dapat di akses hanya didalam base kelas public Dapat diakses dari mana saja (base kelas, kelas turunan, kelas-kelas lain) protected Dapat di akses oleh base kelas dan kelas turunan.

Contoh Dasar Apa saja atribut dan method dari kelas Programmer? Manusia Programmer string nama int gaji void tidur() void minum() void makan() void buatApp()

Overriding? Sekarang ? Manusia Programmer string nama int gaji void tidur() void minum() void makan() void buatApp() void minum() void makan()

Overriding Ketika proggrammer makan dan minum yang berbeda dengan manusia(missal:coffee dan pizza),method makan dan minum telah di ditimpa oleh programmer !

Kelas Abstrak Kelas abstrak adalah kelas yang tidak bisa di instansiasi (buat objek). Kelas abstrak dapat di warisi dan membuat objek dari kelas yang mewarisinya. Kelas abtsrak Abstract di C++ mempunyai methode abstrak, dan tidak mempunyai implementasi. Method abstrak memaksa kelas turunannya untuk membuat implementasi method tsb.

Contoh Mamalia string nama void bersuara() {abstract} Elephant int panjangHidung bersuara()

Contoh Bentuk int x, y double hitungArea() {abstract} Bulat Kotak double diameter double panjang, lebar double hitungArea() double hitungArea()

Inheritance in java

Contoh : Dasar Pewarisan class Manusia { public void tidur() { System.out.println(“Sedang Tidur"); } class Programmer extends Manusia { class Test { public static void main(String [] args) { Programmer oji = new Programmer(); oji.tidur(); // “Sedang Tidur"

Contoh: Overriding class Manusia { public void tidur() { System.out.println("Manusia tidur"); } class Programmer extends Manusia { System.out.println("Programmer tidur"); class Test { public static void main(String [] args) { Programmer jussi = new Programmer(); jussi.tidur(); // "Programmer tidur"

Contoh: super > java Test Manusia tidur Programmer tidur class Manusia { public void tidur() { System.out.println("Manusia tidur"); } class Programmer extends Manusia { super.tidur(); System.out.println("Programmer tidur"); class Test { public static void main(String [] args) { Programmer jussi = new Programmer(); jussi.tidur(); > java Test Manusia tidur Programmer tidur

Konstruktor dan Pewarisan class Manusia { public Manusia() { System.out.println("Manusia"); } class Programmer extends Manusia { public Programmer() { System.out.println("Programmer"); class Test { public static void main(String [] args) { Programmer jussi = new Programmer(); > java Test Manusia Programmer

Konstruktor dan Pewarisan Konstruktor selalu memanggil konstruktor dari kelas dasar! Ketika membuat konstruktor void Manusia() { } Java menambahkan super() – untuk memanggilnya: super(); // panggil konstruktor kelas dasar

class Manusia { public Manusia() { System. out class Manusia { public Manusia() { System.out.println("Manusia"); } class Programmer extends Manusia { public Programmer() { System.out.println("Programmer"); class Test { public static void main(String [] args) { Programmer jussi = new Programmer(); > java Test Manusia Programmer

> java Test Manusia Programmer class Manusia { public Manusia() { super(); //Java menambahkan ini untuk memanggil konstruktor dari kelas dasar System.out.println("Manusia"); } class Programmer extends Manusia { public Programmer() { super(); // Java menambahkan ini untuk memanggil konstruktor dari kelas dasar System.out.println("Programmer"); class Test { public static void main(String [] args) { Programmer jussi = new Programmer(); > java Test Manusia Programmer

Kelas Dasar ? class Manusia { public Manusia() { // Java menambahkan ini untuk memanggil konstruktor dari kelas dasar super(); System.out.println("Manusia"); }

Object Every class derives from a class called Object. // Java juga menambahkan dengan meng- extends(memperluas) kelas Objek juga! class Manusia extends Object { public Manusia() { super(); System.out.println("Manusia"); }

Object clone() equals() finalize() toString() ... Manusia String nama http://java.sun.com/javase/6/docs/api/java/lang/Object.html

> Tidak Bisa di Compile!!! Kenapa ? class Manusia { public Manusia(int a) { System.out.println("Manusia"); } class Programmer extends Manusia { public Programmer() { System.out.println("Programmer"); class Test { public static void main(String [] args) { Programmer jussi = new Programmer(); > javac Test.java > Tidak Bisa di Compile!!! Kenapa ?

class Manusia { public Manusia(int a) { System. out class Manusia { public Manusia(int a) { System.out.println("Manusia"); } class Programmer extends Manusia { public Programmer() { super(); // java memanggil konstruktor // Manusia() tidak ada.. System.out.println("Programmer"); class Test { public static void main(String [] args) { Programmer jussi = new Programmer();

class Manusia { public Manusia(int a) { System. out class Manusia { public Manusia(int a) { System.out.println("Manusia"); } class Programmer extends Manusia { public Programmer() { super(5); // sekarang bisa: Manusia(int a) ada. System.out.println("Programmer"); class Test { public static void main(String [] args) { Programmer jussi = new Programmer();

class Manusia { private String nama public Manusia(String nama) { this class Manusia { private String nama public Manusia(String nama) { this.nama = nama; } class Programmer extends Manusia { private int gaji; public Programmer(String nama, int gaji) { super(nama); this.gaji = gaji; class Test { public static void main(String [] args) { Programmer jussi = new Programmer("Jussi", 5000);

Kelas Abstrak Dari kelas abstrak tidak bisa dibuat objek ! Kelas Abstrak biasanya digunakan dengan pewarisan. Kelas Abstrak mungkin memiliki metode-metode abstrak. Metode Abstrak memaksa kelas turunan untuk mengimplementasikan metode abstrak tersebut.

Kelas Abstrak: contoh abstract class Mamalia { abstract void bersuara(); } class Kucing extends Mamalia { //Kamu harus mengimplementasikan ini! public void bersuara() { System.out.println(“Meong!");

Abstract Class: example // Tidak bisa, karena mamalia // kelas abstrak Mamalia object = new Mamalia(); // Does work Kucing jerry = new Kucing();

Java: Kelas Abstrak dan Interface Kelas Abstrak bisa menampung metode “normal” dan metode abstrak. Interface hanya menampung metode abstrak Kelas Abstrak: class A extends beberapaKelasAbstrak Interface class A implements beberapaInterface

Kelas Abstrak >> Interface abstract class Movable { abstract public void start(); abstract public void stop(); }  interface Movable { public void start(); public void stop();

Implementasi Interface interface Movable { public void start(); public void stop(); } class Mobil implements Movable { // Kamu harus mengimplementasikan ini public void start() { // Do something public void stop() {

Kelas Abstrak vs Interface Kelas abstrak dapat menampung metode normal dan metode abstrak Interface hanya bisa menampung metode abstrak Kelas dapat mewarisi satu kelas abstrak Kelas dapat mengimplementasikan beberapa Interface !

class Mobil extends Vehicle implements Movable, RunsOnGasoline { // You have to implement these public void start() { // Do something } public void stop() { public void kurangiBensin() { public void tambahBensin() { }

Polymorphism

int sebagai parameter class Latihan { public static void main(String [] args) { int x = 4; myMethod(x); } public static void myMethod(int a) { a++;

Manusia sebagai parameter class Manusia { } class Latihan { public static void main(String [] args) { Manusia jack = new Manusia(); myMethod(jack); public static void myMethod(Manusia a) { System.out.line(a.getNama());

Mamalia sebagai parameter class Mamalia { } class Manusiaextends Mamalia { class Kucing extends Mamalia { class Latihan{ public static void main(String [] args) { Manusia jack = new Manusia(); Kucing spot = new Kucing(); Mamalia Mamalia = new Mamalia(); //kucing dapat di lewati sebagai parameter di metode myMethode(Mamalia a) myMethod(jack); myMethod(Kucing); myMethod(Mamalia); public static void myMethod(Mamalia a) { System.out.println(a.getNama());

Object sebagai parameter ... class Latihan{ public static void main(String [] args) { Manusia jack = new Manusia(); Kucing spot = new Kucing(); Mamalia Mamalia = new Mamalia(); // semua tipe objek dapat di lewati di method ini myMethod(jack); myMethod(Kucing); myMethod(Mamalia); myMethod("hello"); // String } public static void myMethod(Object a) { System.out.println(a.toString());

Memanggil metode dari kelas Mamalia class Mamalia { } class Manusia extends Mamalia { public void meong() { System.out.println(“Meong!"); }; class Kucing extends Mamalia { class Exercise13 { public static void main(String [] args) { Manusia jack = new Manusia(); Kucing spot = new Kucing(); Mamalia Mamalia = new Mamalia(); myMethod(jack); myMethod(Kucing); myMethod(Mamalia); public static void myMethod(Mamalia a) { a.meong(); // Why this does not work?

Solusi class Exercise13 { public static void main(String [] args) { Manusia jack = new Manusia(); Kucing spot = new Kucing(); Mamalia Mamalia = new Mamalia(); myMethod(jack); myMethod(spot); myMethod(Mamalia); } public static void myMethod(Mamalia a) { // Now it works if(a instanceof Kucing) { Kucing spot = (Kucing) a; spot.meong();

This works, why? class Mamalia { public void giveBirth() { System.out.println("Giving birth"); }; } class Manusia extends Mamalia { class Kucing extends Mamalia { class Exercise13 { public static void main(String [] args) { Manusia jack = new Manusia(); Kucing spot = new Kucing(); Mamalia Mamalia = new Mamalia(); myMethod(jack); myMethod(Kucing); myMethod(Mamalia); public static void myMethod(Mamalia a) { a.giveBirth(); // Why this works?

class Movable { public void start(); public void stop(); } class Kendaraan { class Mobil extends Kendaraan implements Movable { public void start() { // Do something } public void stop() { class Exercise13 { public static void main(String [] args) { Mobil c = new Mobil(); myMethod(c); //bisa dilewati sama objek yang implemen Moveable public static void myMethod(Movable a) { a.start();