Relasi kedua dalam OOP adalah jenis Is-A. Relasi ini dikenal juga sebagai inheritance/ pewarisan. Relasi class X Is-A class Y berarti class X adalah class Y. Sebagai dampaknya atribut (data maupun method) class Y bisa diturunkan ke class X.
Dalam bahasa Java, perintah untuk pewarisan adalah menggunakan kata "extends". Class X extends class Y berarti class X merupakan turunan dari class Y. Class Y disebut sebagai class induk, base class atau super class. Sedangkan class X disebut sebagai class anak, derived class atau sub class.
Berikut ini adalah contoh source code implementasi relasi Is-A. Ada class tabungan dan class deposito yang diwarisi dari class rekening. Sehingga bisa kita baca class tabungan adalah class rekening. Dan class deposito adalah class rekening juga.
import java.util.Scanner;
class nasabah {
//data
String nama;
long ktp;
rekening rek;
//method
public nasabah(){
nama = "kosong"; ktp = 0;
System.out.println("nasabah baru dibuat...");
}
public nasabah(String n, long k){
nama = n; ktp = k;
System.out.println("nasabah "+nama+" dibuat...");
}
public nasabah(String n){ nama = n; }
public nasabah(long k){ ktp = k; }
//2. setter --> mengisi/ mengubah data
void setNama(String n){
nama = n;
}
void setKtp(long k){
ktp = k;
}
//3. getter --> mengambil data
String getNama(){
return nama;
}
long getKtp(){
return ktp;
}
//4. query
String toStr(){
return "nasabah "+nama+ " no. rekeningnya " +rek.getnomor();
}
public void bukarekening(rekening r){
rek = r; //object assignment
System.out.println(nama+" sukses buka rekening "+rek.toStr());
}
}
class rekening{
long nomor;
double saldo;
public rekening(long n, double s){
nomor = n; saldo = s;
System.out.println("Rekening nomor "+nomor+" sukses dibuat...");
}
public long getnomor(){ return nomor; }
public double getsaldo(){ return saldo; }
public void setsaldo(double s){ saldo = s; }
public String toStr(){ return nomor+" saldonya: "+saldo; }
public void transfer(long t){
saldo = saldo - 100000;
System.out.println("Sukses transfer 100.000 ke "+t);
System.out.println("Sisa saldo : "+saldo);
}
public void bayarlistrik(){
Scanner sc = new Scanner(System.in);
System.out.println("Pembayaran Listrik\nMasukkan Kode Pelanggan = ");
long kode = sc.nextLong();
System.out.print("Masukkan jumlah = ");
double tagihan = sc.nextDouble();
if (saldo > tagihan)
{ saldo = saldo - tagihan;
System.out.println("Pembayaran tagihan sukses");
}
else System.out.println("Saldo tidak mencukupi");
System.out.println("Saldo anda : "+saldo);
}
public void bayarlistrik(long k, double t){
if (saldo > t)
{ saldo = saldo - t;
System.out.println("Pembayaran tagihan sukses");
}
else System.out.println("Saldo tidak mencukupi");
System.out.println("Saldo anda : "+saldo);
}
}
class tabungan extends rekening{
tabungan(long n, double s){
super(n,s); //constructor utk base class
}
public void transfer(long tujuan, double nominal){
if (getsaldo() > nominal){
setsaldo(saldo - nominal);
System.out.println("Transfer sukses.\nSaldo "+getsaldo());
}
else{
System.out.println("Transfer gagal. Saldo tidak cukup");
}
}
}
class deposito extends rekening{
int jangkawaktu;
deposito(long n, double s, int j){
super(n,s); //constructor utk base class
jangkawaktu = j;
System.out.println("Deposito "+getnomor()+" senilai "+saldo+" dibuat dengan jangka "+jangkawaktu+" bulan");
}
}
public class bank {
public static void main(String a[]){
nasabah ika = new nasabah("ika", 123456789);
rekening bni = new rekening(123456789, 1000000);
ika.bukarekening(bni);
System.out.println(ika.toStr());
tabungan bri = new tabungan(56789, 200000);
ika.bukarekening(bri);
System.out.println(ika.toStr());
bri.transfer(34567, 100000);
deposito mandiri = new deposito(456789, 10000000, 36);
ika.bukarekening(mandiri);
System.out.println(ika.toStr());
}
}
Dalam bahasa Java, perintah untuk pewarisan adalah menggunakan kata "extends". Class X extends class Y berarti class X merupakan turunan dari class Y. Class Y disebut sebagai class induk, base class atau super class. Sedangkan class X disebut sebagai class anak, derived class atau sub class.
Berikut ini adalah contoh source code implementasi relasi Is-A. Ada class tabungan dan class deposito yang diwarisi dari class rekening. Sehingga bisa kita baca class tabungan adalah class rekening. Dan class deposito adalah class rekening juga.
import java.util.Scanner;
class nasabah {
//data
String nama;
long ktp;
rekening rek;
//method
public nasabah(){
nama = "kosong"; ktp = 0;
System.out.println("nasabah baru dibuat...");
}
public nasabah(String n, long k){
nama = n; ktp = k;
System.out.println("nasabah "+nama+" dibuat...");
}
public nasabah(String n){ nama = n; }
public nasabah(long k){ ktp = k; }
//2. setter --> mengisi/ mengubah data
void setNama(String n){
nama = n;
}
void setKtp(long k){
ktp = k;
}
//3. getter --> mengambil data
String getNama(){
return nama;
}
long getKtp(){
return ktp;
}
//4. query
String toStr(){
return "nasabah "+nama+ " no. rekeningnya " +rek.getnomor();
}
public void bukarekening(rekening r){
rek = r; //object assignment
System.out.println(nama+" sukses buka rekening "+rek.toStr());
}
}
class rekening{
long nomor;
double saldo;
public rekening(long n, double s){
nomor = n; saldo = s;
System.out.println("Rekening nomor "+nomor+" sukses dibuat...");
}
public long getnomor(){ return nomor; }
public double getsaldo(){ return saldo; }
public void setsaldo(double s){ saldo = s; }
public String toStr(){ return nomor+" saldonya: "+saldo; }
public void transfer(long t){
saldo = saldo - 100000;
System.out.println("Sukses transfer 100.000 ke "+t);
System.out.println("Sisa saldo : "+saldo);
}
public void bayarlistrik(){
Scanner sc = new Scanner(System.in);
System.out.println("Pembayaran Listrik\nMasukkan Kode Pelanggan = ");
long kode = sc.nextLong();
System.out.print("Masukkan jumlah = ");
double tagihan = sc.nextDouble();
if (saldo > tagihan)
{ saldo = saldo - tagihan;
System.out.println("Pembayaran tagihan sukses");
}
else System.out.println("Saldo tidak mencukupi");
System.out.println("Saldo anda : "+saldo);
}
public void bayarlistrik(long k, double t){
if (saldo > t)
{ saldo = saldo - t;
System.out.println("Pembayaran tagihan sukses");
}
else System.out.println("Saldo tidak mencukupi");
System.out.println("Saldo anda : "+saldo);
}
}
class tabungan extends rekening{
tabungan(long n, double s){
super(n,s); //constructor utk base class
}
public void transfer(long tujuan, double nominal){
if (getsaldo() > nominal){
setsaldo(saldo - nominal);
System.out.println("Transfer sukses.\nSaldo "+getsaldo());
}
else{
System.out.println("Transfer gagal. Saldo tidak cukup");
}
}
}
class deposito extends rekening{
int jangkawaktu;
deposito(long n, double s, int j){
super(n,s); //constructor utk base class
jangkawaktu = j;
System.out.println("Deposito "+getnomor()+" senilai "+saldo+" dibuat dengan jangka "+jangkawaktu+" bulan");
}
}
public class bank {
public static void main(String a[]){
nasabah ika = new nasabah("ika", 123456789);
rekening bni = new rekening(123456789, 1000000);
ika.bukarekening(bni);
System.out.println(ika.toStr());
tabungan bri = new tabungan(56789, 200000);
ika.bukarekening(bri);
System.out.println(ika.toStr());
bri.transfer(34567, 100000);
deposito mandiri = new deposito(456789, 10000000, 36);
ika.bukarekening(mandiri);
System.out.println(ika.toStr());
}
}