5.Inner Class & Abstrak Class

Inner Class

Inner Class juga sering disebut Nested Class yaitu sebuah Class yang dideklarasikan didalam Class lain, Inner Class dapat mengakses semua attribute dan method Outer Class-nya meskipun “private”. Namun, Outer Class tidak dapat mengakses Inner Class secara langsung, tetapi harus menciptakan object Inner Classnya dulu.

Inner Class adalah suatu Class yang didefinisikan di dalam Class lain. Dengan kata lain, Inner Class adalah anggota (member) dari Class lain, sama halnya seperti variable dan method. Hal ini mengakibatkan instance dari Inner Class dapat mengakses /berbagi dengan instance dari outer Class-nya. Instance dari Inner Class dapat mengakses semua member dari outer Class-nya, bahkan yang private.
ada 4 jenis inner class, yaitu :

1. “Regular” Inner class

2. Method-local inner class

3. Anonymous inner class

4. Static nested classes

Tapi kali ini akan bahas tentang nested saja. Static nested class adalah inner class dengan modifier static.Static nested class sebenarnya bukan inner class, static nested class hanyalah top-level class yang disarangkan di dalam class lain. Karena static, maka untuk membuat instance dari static nested class tidak diperlukan instance dari outer class-nya (tidak seperti regular inner class ataupun method-local inner class).

Contoh ke Dalam 3 Bahasa

yang Pertama adalah Contoh program dengan menggunakan Bahasa CSharp (C#)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OOP2_Widy_Innerclass
{
class pertama {
protected int a;
protected int b;
public int nilaia {
get { return a; }
set { a = value; }
}
public int nilaib {
get { return b; }
set { b = value; }
}
public int Penambahan() {
return nilaia + 5;
}
public class kedua : pertama {
public int Perkalian() {
return nilaia * nilaib;
}
}
}
class Program
{
public static void Main(string[] args)
{
pertama outer = new pertama();
pertama.kedua inner = new OOP2_Widy_Innerclass.pertama.kedua();
Console.WriteLine("niali berapa yang ditambah 5 hasilnya 27 ");
Console.Write("Masukkan nilai tambah 5 : ");
outer.nilaia = int.Parse(Console.ReadLine());
Console.WriteLine("Nilai kedua         : 5");
Console.WriteLine("Hasil penambahan    : {0}", outer.Penambahan());
Console.WriteLine();
Console.WriteLine("Perkalian nilai awal dengan nilai kedua");
Console.Write("Masukkan nilai awal  : ");
inner.nilaia = int.Parse(Console.ReadLine());
Console.Write("Masukkan nilai kedua : ");
inner.nilaib = int.Parse(Console.ReadLine());
Console.WriteLine("Hasil perkalian      : {0}", inner.Perkalian());
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}

Hasilnya adalah  :
Capture3.1

Selanjutnya Program C++ :


#include <cstdlib>
#include <iostream>

using namespace std;
class pertama {
protected : int a;
protected : int b;
public :
void setNilaiA(int x) {
a = x;
}
int getNilaiA() {
return a;
}
void setNilaiB(int y) {
b = y;
}
int getNilaiB() {
return b;
}
int Penambahan() {
return getNilaiA() + 5;
}
class kedua;
};
class pertama::kedua : public pertama {
public : int Perkalian() {
return getNilaiA() * getNilaiB();
}
};
int main(int argc, char *argv[])
{
int x, y;
pertama outer;
pertama::kedua inner;
cout << "niali berapa yang ditambah 5 hasilnya 27" << endl;
cout << "Masukkan nilai tambah 5 : ";
cin >> x;
outer.setNilaiA(x);
cout << "Nilai kedua         : 5" << endl;
cout << "Hasil penambahan    : " << outer.Penambahan() << endl;
cout << endl;
cout << "Perkalian nilai awal dengan nilai kedua" << endl;
cout << "Masukkan nilai awal  : ";
cin >> x;
inner.setNilaiA(x);
cout << "Masukkan nilai kedua : ";
cin >> y;
inner.setNilaiB(y);
cout << "Hasil perkalian      : " << inner.Perkalian() << endl;
system("PAUSE");
return EXIT_SUCCESS;
}

 

 

Hasilnya Sebagai berikut Ini :
Capture3.2

Contoh yang ke 3 adalah Dengan Menggunakan Program Bahasa Java :



package oop2_widy1_innerclass;

import java.util.Scanner;

class pertama {
protected int a;
protected int b;
public void setNilaiA(int x) {
this.a = x;
}
public int GetNilaiA() {
return a;
}
public void setNilaiB(int y) {
this.b = y;
}
public int GetNilaiB() {
return b;
}
public int Penambahan() {
return GetNilaiA() + 5;
}
public class kedua extends pertama {
public int Perkalian() {
return GetNilaiA() * GetNilaiB();
}
}
}
public class Main {

public static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
int a, b;
pertama outer = new pertama();
pertama.kedua inner = outer.new kedua();
System.out.println("niali berapa yang ditambah 5 hasilnya 27");
System.out.print("Masukkan nilai tambah 5 : ");
a = input.nextInt();
outer.setNilaiA(a);
System.out.println("Nilai kedua         : 5");
System.out.printf("Hasil penambahan    : " + outer.Penambahan());
System.out.println();
System.out.println("Perkalian nilai awal dengan nilai kedua");
System.out.print("Masukkan nilai awal  : ");
a = input.nextInt();
inner.setNilaiA(a);
System.out.print("Masukkan nilai kedua : ");
b = input.nextInt();
inner.setNilaiB(b);
System.out.printf("Hasil perkalian      : " + inner.Perkalian());
}

}

 

Nah, Beginilah Hasilnya :

Capture3.3

 Abstract Class

Abstract class adalah class yang memiliki sebuah atau lebih methods tak terdefinisi.

Abstract class di umpamakan ‘sumpah’ dalam lingkup keluarga, yaitu suatu class berjanji bahwa turunannya akan memberikan definisi pada abstract method yang ada.

Syarat abstract class:

  • Bila class memiliki minimal satu abstract method (method tanpa definisi), maka class tersebut harus didefinisikan abstract class dengan menambahkan kata abstract pada nama class. (Lihat contoh kode di bawah)
  • Kita tidak bisa menciptakan object dari abstract class. Hanya turunan (concrete descendent class, yaitu class non-abstract turunan abstract class) yang bisa. Catatan: concrete class adalah class tanpa abstract method.
  • Class turunan abstract class harus mendefinisikan semua abstract methods yang ada pada parent class. Bila tidak, atau bahkan menambahkan abstract methods yang ada, class turunan (derived class) tersebut juga harus dideklarasikan abstract.
  • Tidak ada batas jumlah abstract methods dalam abstract class.
  • Abstract method tidak bisa private, hanya public, protected, dan package-private.
  • Abstract method memberikan fleksibilitas dalam pemrograman bahwa programmer ‘berjanji’akan memberikan definisi method yang pada saat itu belum terpikirkan.

Abstract Class merupakan Class yang khusus dibuat untuk keperluan inheritance. Tujuan dari pembuatan abstract class ini ialah untuk membuat definisi umum bagi class-class yang akan menjadi turunan darinya.

Untuk membuatnya kita cukup menambahkan keyword abstract di depan class yang kita definisikan.

Abstract Class mempunyai method dan attribute yang sama dengan class lainnya, dikatakan abstract jika salah satu methodnya dideklarasikan abstract. Method abstract adalah method yang tidak memiliki implementasi.

Sebuah Class dapat dideklarasikan sebagai abstract class meskipun tidak memiki method abstract.

Misalnya deklarasi mothod abstract :

Abstract public void print();

Variable dengan type abstract class masih bisa dibuat, namun harus refer ke subclass dari abstract class yang tidak abstract.

Abstract Class tidak dapat dibuatkan object menggunakan keyword “new”. Kalaupun terpaksa menciptakan abstract class tanpa subclass maka harus mengimplementasikan method abstract nya secara langsung saat deklarasi.

Beberapa Contoh Dalam Abstract Class :(C#, C++, Java)

Yang pertama kita bahas adalah program dengan menggunakan Bahsa Pemograman  C# :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OOP2_Widy_AbtractClass
{
class Program
{
static Implementasi imp = new Implementasi();
public static void Main(string[] args)
{
string nama = "Widy.net";
string alamat = "Banyuwangi";
string telp = "081934767887";
string komputer = "10";
string penghasilah = "10000000";

imp.Showwarnet(nama,alamat,telp);
imp.ShowNma(nama,komputer,penghasilah,telp);
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}

}
abstract class Abs // --- >Abstrak Class
{
public abstract void Showwarnet(string nama,string alamat,string tlp); // ---> Abstrak method
public void ShowNma(string nama,string komputer,string penghasilan,string tlp)
{
Console.WriteLine("PENGHASILAN");
Console.WriteLine();
Console.WriteLine("Nama warnet  : {0}",nama);
Console.WriteLine("Komputer     : {0} unit",komputer);
Console.WriteLine("penghasilan  : Rp {0}",penghasilan);
Console.WriteLine("No Telp      : {0}",tlp);
Console.WriteLine();
Console.WriteLine();
}
}

class Implementasi : Abs
{
public override void Showwarnet(string nama, string alamat, string tlp)
{
Console.WriteLine("WARNET");
Console.WriteLine();
Console.WriteLine("Nama anda    : {0}",nama);
Console.WriteLine("Alamat       : {0}",alamat);
Console.WriteLine("No Telp      : {0}",tlp);
Console.WriteLine();
Console.WriteLine();
}
}
}

Hasilnya Seperti Ini :

Capture4.1

Selanjutnya Program yang Kedua Mengenai C++ (CPlus-plus) :

using namespace std;
class Abs
{
public : virtual void Showwarnet(string nama,string alamat,string tlp = 0;
// ---> Abstrak method
public : void ShowNma(string nama,string komputer,string penghasilan,string tlp)
{
cout<<"penghasilan"<<endl;
cout<<endl;
cout<<"Nama warnet  : "<<nama<<endl;
cout<<"komputer     : "<<komputer<<endl;
cout<<"Penghasilan  : "<<penghasilan<<endl;
cout<<"No Telp      : "<<tlp<<endl;
cout<<endl;
cout<<endl;
}
};
class Implementasi : public Abs
{
public : void Showwarnet(string nama, string alamat, string tlp)
{
cout<<"Warnet"<<endl;
cout<<endl;
cout<<"Nama anda    : "<<nama<<endl;
cout<<"Alamat       : "<<alamat<<endl;
cout<<"No Telp      : "<<tlp<<endl;
cout<<endl;
cout<<endl;
}
};
int main(int argc, char *argv[])
{
Implementasi imp;


string nama = "Widy.net";
string alamat = "Banyuwangi";
string telp = "081934767887";
string komputer = "10 unit";
string penghasilan = "10000000";

imp.Showwarnet(nama,alamat,telp);
imp.ShowNma(nama,komputer,penghasilan,telp);

cout<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}

Maka Hasilnya Adalah :

Capture4.1

Dan Program bahasa Yang terakhir yang saya Bahas, adalah Tentang  Java :


package oop2_widy_abstract_class;

import java.util.*;


public class Main {
private static Scanner input = new Scanner(System.in);
static Implementasi imp = new Implementasi();

public static void main(String[] args) {
String nama = "Widy.net";
String alamat = "Banyuwangi";
String telp = "081934767887";
String komputer = "10 unit";
String penghasilan = "10000000";

imp.Showwarnet(nama,alamat,telp);
imp.ShowNma(nama,komputer,penghasilan,telp);
}

}
abstract class Abs // --- >Abstrak Class
{
public abstract void Showwarnet(String nama,String alamat,String tlp); // ---> Abstrak method
public void ShowNma(String nama,String komputer ,String penghasilan,String tlp)
{
System.out.println("Penghasilan");
System.out.println();
System.out.println("Nama anda   : "+nama);
System.out.println("komputer    :  "+komputer );
System.out.println("penghasilan : "+penghasilan);
System.out.println("No Telp     : "+tlp);
System.out.println();
System.out.println();
}
}
class Implementasi extends Abs
{
@Override
public void Showwarnet(String nama, String alamat, String tlp)
{
System.out.println("WARNET");
System.out.println();
System.out.println("Nama anda   : "+nama);
System.out.println("Alamat      : "+alamat);
System.out.println("No Telp     : "+tlp);
System.out.println();
System.out.println();
}
}

Hasilnya sebagai Berikut :

Capture4.3

8 responses to “5.Inner Class & Abstrak Class

  1. Iyong kagum ma web anda mbak.. bagus, rapi +lengkap..
    nice!!

  2. Luar biasa. cweekkk ,ajarin program donk 🙂

  3. Cantik2 pinter program jga ya.. slam knal dri aq bagas

  4. keren sekali. semoga semakin pandai

  5. keren sekali. semoga semakin pandai

  6. terima kasih, ini sangat membantu

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s