Package

              Ketika kita menangani program dalam skala kecil, tidak ada masalah untuk meletakkan semua file java dalam satu direktori. Itu akan mempercepat dan mempermudah pekerjaan dan masih aman. Tetapi jika project yang dikerjakan semakin berkembang dan jumlah file yang dikerjakan semakin banyak serta orang yang mengerjakan project lebih dari satu maka meletakkan file java ke dalam satu direktori akan merepotkan pekerjaan karena software yang dibangun akan tidak terstruktur. Java menyediakan fitur untuk menangani hal ini dengan memakai “Package”
              Package adalah mengelompokkan kelas-kelas yang saling berelasi dan interfaces yang memberikan proteksi terhadap access kelas yang tidak boleh diakses oleh kelas lain karena tidak berelasi,dan manajemen nama.
Packages tidak lebih dari sekedar cara untuk mengorganisir file kedalam direktori yang berbeda berdasarkan fungsionalitas dan kegunaannya.
Packaging membantu kita untuk menghindari terjadinya collision ketika kita menggunakan nama kelas yang sama dengan yang sudah ada. Packaging juga membantu programmer dalam mencari dan menggunakan nama kelas dan mengontrol akses.

Interface


Abstract Methode


Bentuk umum dari sebuah method abstract adalah sebagai berikut:
abstract <modifier> <returnType> <name>(<parameter>*);
Sebuah class yang berisi method abstract harus dideklarasikan sebagai sebuah class abstract.
abstract <modifier> <returnType> <name>(<parameter>*);abstract class
<name> {
   /* constructors, fields and methods */
}
Kata kunci tidak dapat digunakan pada konstruktor atau method  static. Ini juga penting untuk
diingat bahwa class abstract tidak dapat di-instantiate.
Class   yang  meng-extends  sebuah  class  abstract  harus  mengimplementasikan  semua  method
abstract. Jika tidak subclass sendiri dapat dideklarasikan sebagai abstract.

Encapsulation

Setelah kita membahas tentang Inheritance, untuk selanjutnya kita akan membahas tentang apa itu Encapsulation. Encapsulation adalah menyembunyikan method suatu objek dari objek lain. Information Hiding adalah menyembunyikan attribute suatu objek dari objek lain.PublicMenyatakan bahwa kelas/method/attribute tersebut dapat diakses oleh kelas lain dimanapun.
Protected Menyatakan bahwa kelas/method/attribute tersebut dapat diakses oleh kelas lain yang berada dalam satu package atau kelas lain tersebut merupakan turunannya.
Private Menyatakan bahwa kelas tersebut tidak dapat diakses sama sekali oleh kelas lain bahkan juga tidak dapat diturunka.

Inheritance

Setelah membahas polimorfisme, kita lanjutkan ke tingkat selanjutnya yaitu inheritance.
Langsung aja, Inheritance merupakan pewarisan atribut dan method pada   Sebuah class yang diperoleh dari class yang telah terdefinisi tersebut. Setiap  subclass akan mewarisi state (variabel-variabel) dan behaviour (method-method) dari superclass-nya. Subclass kemudian dapat menambahkan state dan behaviour baru yang spesifik dan dapat pula memodifikasi (override)  state dan behaviour yang diturunkan oleh superclass-nya.

Contoh Program Polymorphism

       Sebelumnya saya mengshare tentang polimorfisme di java, kali ini saya akan kasi contoh program yg lebih seru biar lebih paham apa itu polimorfisme, 
simpan dengan nama Student.java

class Student {
   public void Write(int ID, int Grad, String Fname, String Lname) {
       m_ID = ID;
       m_Graduation = Grad;
       m_First = Fname;
       m_Last = Lname;
    }  
    public void Display()
    {  
        System.out.println( "Student: " + m_ID + " " + m_First + " " + m_Last + " Graduated: " + m_Graduation);
    }  
    private int m_ID, m_Graduation;  
    private String m_First;  
    private String m_Last;

untuk yang ini simpan dengan nama StudentGrad.java


class StudentGrad extends Student {
    public void Write(int ID, int Grad, String Fname, String Lname, int yrGrad, String unSch, String major)
   {
       super.Write(ID, Grad, Fname, Lname);
       m_UndergradSchool = unSch;
       m_Major = major;
       m_Grad = Grad;
       YearGraduated = yrGrad;
    }
    public void Display(){
        super.Display();
        System.out.println(" Graduated: " + m_Grad + " " + m_UndergradSchool + " " + m_Major + " " + YearGraduated);
    }   
    private Integer YearGraduated,m_Grad;
    private String m_UndergradSchool;
    private String m_Major;
}