(PBO 2017,Teknik Informatika UTM)
·
· Abstract
class
Abstract class adalah kelas yang terletak pada posisi tertinggi pada hierarki
kelas. Kelas ini digunakan sebagai basis bagi penurunan kelas lainnya, sehingga
abstract class tidak dapat diinstansiasi secara langsung menjadi object. Suatu
abstract class bisa mengandung method kongkrit dan/atau method abstract.
Abstract method meruapakan suatu method yang tidak mempunyai badan method.
Hanya berupa nama method dan parameter inputan method. Ketika suatu abstract
class diturunkan/ di-extends, maka subclass harus mengimplementasikan
semua method abstract pada parent/ base class. Jika tidak mengimplementasikan
semua method abstract maka subclass harus dideklarasikan sebagai abstract
class.
· Concrete Class
Concrete Class merupakan class yang bisa di instansiasikan atau bisa dibuat
objeknya. Conrete class bisa didefinisikan class yang nyata, dapat membentuk
atau instansiasi object. Object hanya bisa dibuat dari no-abstract class
(consrete class). Selain itu, juga dapat menurunkan implementasi dari super
class dan sebagai base class pada hierarchical relationship yang juga dibutuhkan
class lain untuk mewarisinya. Consrte class merupakan class paling ujung
disetiap cabang sebuah pohon.
Program :
abstract class AbstracClass {
abstract protected String getValue();
abstract protected String prefixValue (String previx);
public void printOut (){
System.out.println(this.getValue());
}
}
class ConcreteClass1 extends AbstracClass{
public String getValue() {
return "ConcreteClass1";
}
public String prefixValue (String prefix) {
return prefix + "ConcreteClass1";
}
}
class ConcreteClass2 extends AbstracClass{
public String getValue(){
return "ConcreteClass2";
}
public String prefixValue (String prefix){
return prefix + "ConcreteClass2";
}
}
class main {
public static void main(String[] args){
ConcreteClass1 class1 = new ConcreteClass1();
class1.printOut ();
System.out.println (class1.prefixValue ("FOO_"));
ConcreteClass2 class2 = new ConcreteClass2();
class2.printOut();
System.out.println(class2.prefixValue("FOO_"));
}
}
abstract protected String getValue();
abstract protected String prefixValue (String previx);
public void printOut (){
System.out.println(this.getValue());
}
}
class ConcreteClass1 extends AbstracClass{
public String getValue() {
return "ConcreteClass1";
}
public String prefixValue (String prefix) {
return prefix + "ConcreteClass1";
}
}
class ConcreteClass2 extends AbstracClass{
public String getValue(){
return "ConcreteClass2";
}
public String prefixValue (String prefix){
return prefix + "ConcreteClass2";
}
}
class main {
public static void main(String[] args){
ConcreteClass1 class1 = new ConcreteClass1();
class1.printOut ();
System.out.println (class1.prefixValue ("FOO_"));
ConcreteClass2 class2 = new ConcreteClass2();
class2.printOut();
System.out.println(class2.prefixValue("FOO_"));
}
}
Run :
ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2
· Inheritance
Interface adalah kumpulan method yang hanya memuat deklarasi dan struktur
method, tanpa detail implementasinya. Sedangkan detail dari method berada pada
class yang mengimplementasikan interface tersebut.
Interface digunakan jika ingin mengaplikasikan suatu method yang spesifik, yang
tidak diperoleh dari proses inheritance. Tipe data yang boleh pada interface
hanya tipe data konstan.
Beberapa
perbedaan Interface dan Kelas Abstrak yaitu :
· Abstract
class dapat memiliki tipe data dengan semua tipe data, sedangkan interface tipe
datanya hanya berupa konstanta
· Method
pada abstract class dapat berupa method kongkrit dan method abstract.
Sedangkan pada interface semua method harus berupa
method abstract.
Program
:
package Hewan;
interface nama1{
public void setNama(String nama);
public String getNama();
}
interface makanan{
public void setEat(String eat);
public String getEat();
}
interface jalan{
public void setBergerak(String bergerak);
public String getBergerak();
}
class jalan_eat1 implements makanan{
private String nama, eat, bergerak;
public void setNama(String nama) {
this.nama = nama;
}
public String getNama() {
return nama;
}
public void setEat(String eat) {
this.eat = eat;
}
public String getEat() {
return eat;
}
public void setBergerak(String bergerak) {
this.bergerak = bergerak;
}
public String getBergerak() {
return bergerak;
}
}
class jalan_eat2 implements makanan{
private String nama, eat, bergerak;
public void setNama(String nama) {
this.nama = nama;
}
public String getNama() {
return nama;
}
public void setEat(String eat) {
this.eat = eat;
}
public String getEat() {
return eat;
}
public void setBergerak(String bergerak) {
this.bergerak = bergerak;
}
public String getBergerak() {
return bergerak;
}
}
class Hewan {
public static void main(String[] args) {
jalan_eat1 hewan = new jalan_eat1();
hewan.setNama("Sapi");
hewan.setEat("Rumput");
hewan.setBergerak("4 kaki");
jalan_eat2 hewan2= new jalan_eat2();
hewan2.setNama("Singa");
hewan2.setEat("Daging");
hewan2.setBergerak("4 kaki");
System.out.println(hewan.getNama());
System.out.println("makan " + hewan.getEat());
System.out.println("berjalan dengan " + hewan.getBergerak());
System.out.println("~~~~~~~~~~~~~~~~~");
System.out.println(hewan2.getNama());
System.out.println("makan " + hewan2.getEat());
System.out.println("berjalan dengan " + hewan2.getBergerak());
}
}
interface nama1{
public void setNama(String nama);
public String getNama();
}
interface makanan{
public void setEat(String eat);
public String getEat();
}
interface jalan{
public void setBergerak(String bergerak);
public String getBergerak();
}
class jalan_eat1 implements makanan{
private String nama, eat, bergerak;
public void setNama(String nama) {
this.nama = nama;
}
public String getNama() {
return nama;
}
public void setEat(String eat) {
this.eat = eat;
}
public String getEat() {
return eat;
}
public void setBergerak(String bergerak) {
this.bergerak = bergerak;
}
public String getBergerak() {
return bergerak;
}
}
class jalan_eat2 implements makanan{
private String nama, eat, bergerak;
public void setNama(String nama) {
this.nama = nama;
}
public String getNama() {
return nama;
}
public void setEat(String eat) {
this.eat = eat;
}
public String getEat() {
return eat;
}
public void setBergerak(String bergerak) {
this.bergerak = bergerak;
}
public String getBergerak() {
return bergerak;
}
}
class Hewan {
public static void main(String[] args) {
jalan_eat1 hewan = new jalan_eat1();
hewan.setNama("Sapi");
hewan.setEat("Rumput");
hewan.setBergerak("4 kaki");
jalan_eat2 hewan2= new jalan_eat2();
hewan2.setNama("Singa");
hewan2.setEat("Daging");
hewan2.setBergerak("4 kaki");
System.out.println(hewan.getNama());
System.out.println("makan " + hewan.getEat());
System.out.println("berjalan dengan " + hewan.getBergerak());
System.out.println("~~~~~~~~~~~~~~~~~");
System.out.println(hewan2.getNama());
System.out.println("makan " + hewan2.getEat());
System.out.println("berjalan dengan " + hewan2.getBergerak());
}
}
Run:
Sapi
makan
Rumput
berjalan
dengan 4 kaki
~~~~~~~~~~~~~~~~~
Singa
makan
Daging
berjalan
dengan 4 kaki
Kapan kita menggunakan class abstract dan Inheritance ?Menggunakan
interface untuk mendefinisikan method standart yang sama dalam class – class
yang berbeda , kita telah membuat kumpulan definisi method standar (abstrak),
kita dapat menulis method tunggal (spesifik) untuk memanipulasi semua class –
class yang mengimplementasikan interface tersebut.
Gunakan class abstract untuk mendefinisikan secara luas sifat – sifat dari
class tertinggi dari hirarki OOP, dan gunakan sebclassnya (turunannya / child
class) untuk melengkapi deskripsi method dari class abstract.