Ini disebut abstraksi. Kata “Kendaraan” sendiri masih abstrak. Tapi kita bisa membayangkan seperti apa konsep kendaraannya
Jika saya katakan
"Mobil bergerak"
Anda harus tahu apa yang saya maksud
Mobil adalah hal yang konkrit atau nyata, sedangkan kendaraan masih bersifat abstrak
Prinsip abstraksi ini juga ada di OOP dan kami benar-benar menggunakannya
Tapi tidak menyadarinya. jika itu adalah abstraksi
Nah di Java sendiri ada yang namanya abstract class untuk membuat abstraksi
Apa itu kelas abstrak?
dan bagaimana cara menggunakannya?
Mari berdiskusi…
Apa itu Kelas Abstrak?
Kelas abstrak adalah kelas yang masih dalam bentuk abstrak. Karena wujudnya masih abstrak, ia tidak bisa langsung dibuat menjadi objek
Sebuah kelas agar bisa disebut kelas abstrak memiliki setidaknya satu atau lebih metode abstrak
Metode abstrak adalah metode yang tidak memiliki implementasi atau bentuk konkret
Bingung?
Sudahlah
Metode abstrak adalah metode yang tidak memiliki konten
Hanya ada nama
// ini abstrak method void sayHello(); // ini bukan abstrak method karena // punya implementasi di body method void greeting(){ System.out.println("Hello Java"); }
dan kelas yang menggunakan metode ini secara otomatis akan menjadi kelas abstrak
Mengapa Anda Harus Menggunakan Kelas Abstrak?
Kita tahu bahwa kelas abstrak tidak dapat digunakan secara langsung
Oleh karena itu, agar kelas abstrak dapat digunakan, harus dibuat konkret
Cara membuat kelas abstrak menjadi konkret adalah dengan mengimplementasikan metode yang masih abstrak
Kita bisa melakukan ini dengan warisan.
Kelas abstrak biasanya digunakan sebagai kelas induk dari kelas lain. Kelas anak akan membuat versi konkret dari kelas abstrak
Lalu pertanyaannya
Mengapa kelas harus dibuat abstrak?
Kita hanya bisa menggunakan kelas normal
Iya itu mungkin
Namun dalam kondisi tertentu, kelas induk tidak ingin kita membuatnya sebagai objek. karena kode metode belum jelas bagaimana implementasinya
Jadi kelas ini harus dibuat abstrak
Untuk lebih memahami, coba perhatikan contoh berikut
class Database { String getTableName(){ return null; } } class MySQLDatabase extends Database { @override String getTableName(){ return this.sql("SELECT table_name FROM database.tabel") } }_
Kedua kelas tersebut merupakan kelas reguler. Sekarang mari kita coba membuat objek dengan kelas Database
Database db = new Database();
Ini akan valid, tetapi sebenarnya objek ________34______ tidak dapat digunakan
Saat kita memanggil metode class Database { String getTableName(){ return null; } } class MySQLDatabase extends Database { @override String getTableName(){ return this.sql("SELECT table_name FROM database.tabel") } }0 kelas Database akan bingung
Mengapa?
Karena belum jelas bagaimana caranya untuk mendapatkan nama tabel di database tersebut
Dan database apa yang akan digunakan?
Oleh karena itu, kelas Database harus dibuat abstrak sehingga tidak dapat digunakan untuk membuat objek
Oke. lalu bagaimana cara membuat class abstract?
Cara Membuat Kelas Abstrak di Java
Cara membuat kelas abstrak adalah dengan memberikan kata kunci class Database { String getTableName(){ return null; } } class MySQLDatabase extends Database { @override String getTableName(){ return this.sql("SELECT table_name FROM database.tabel") } }3 ke kelas dan metode yang ingin dibuat abstrak
Contoh
abstract class Database { abstract String getDatabaseName(); abstract String getTableName(); }
Mudah kan?
Sekarang mari kita coba contoh di program
Contoh Program Kelas Abstrak
Nah, kita akan mencoba latihan dengan contoh yang sudah kita lakukan, yaitu berdiri tegak
Coba perhatikan class diagram berikut ini
Kelas class Database { String getTableName(){ return null; } } class MySQLDatabase extends Database { @override String getTableName(){ return this.sql("SELECT table_name FROM database.tabel") } }_4 adalah kelas abstrak, karena memiliki metode abstrak class Database { String getTableName(){ return null; } } class MySQLDatabase extends Database { @override String getTableName(){ return this.sql("SELECT table_name FROM database.tabel") } }5 (menghitung luas)
Jika kita membuat objek dengan kelas class Database { String getTableName(){ return null; } } class MySQLDatabase extends Database { @override String getTableName(){ return this.sql("SELECT table_name FROM database.tabel") } }_4 dan memanggil metode class Database { String getTableName(){ return null; } } class MySQLDatabase extends Database { @override String getTableName(){ return this.sql("SELECT table_name FROM database.tabel") } }5, maka kelas class Database { String getTableName(){ return null; } } class MySQLDatabase extends Database { @override String getTableName(){ return this.sql("SELECT table_name FROM database.tabel") } }4 akan bingung
Apa bentuk atau bentuk datar yang ingin Anda hitung luasnya?
Apa rumusnya?
Oleh karena itu, kami membuat kelas ini abstrak. Pertanyaannya tidak jelas bagaimana cara menghitung luasnya
Dan kita juga semua tahu bahwa jika bentuk atau bentuknya datar, pasti ada luasnya. Tetapi metode perhitungannya berbeda
Nah sekarang mari kita coba di kode programnya
Buat proyek baru di Netbeans dengan nama class Database { String getTableName(){ return null; } } class MySQLDatabase extends Database { @override String getTableName(){ return this.sql("SELECT table_name FROM database.tabel") } }9
Setelah itu, pada Database db = new Database();_0 buat class baru bernama class Database { String getTableName(){ return null; } } class MySQLDatabase extends Database { @override String getTableName(){ return this.sql("SELECT table_name FROM database.tabel") } }4 dan isikan kodenya seperti berikut
public abstract class Shape { String color; void setColor(String color){ this.color = color; } String getColor(){ return this.color; } abstract float getArea(); }
Selanjutnya, buat kelas Database db = new Database();_2. Kelas ini merupakan turunan dari kelas class Database { String getTableName(){ return null; } } class MySQLDatabase extends Database { @override String getTableName(){ return this.sql("SELECT table_name FROM database.tabel") } }_4
Berikut adalah kode kelas Database db = new Database();2
public class Triangle extends Shape { private float base; private float height; public Triangle(int base, int height) { this.base = base; this.height = height; } @Override float getArea() { return 0.5f * base * height; } }
Setelah itu, buat turunan lain dari kelas class Database { String getTableName(){ return null; } } class MySQLDatabase extends Database { @override String getTableName(){ return this.sql("SELECT table_name FROM database.tabel") } }4, yaitu Database db = new Database();6
Ini kode untuk kelas Database db = new Database();_6
public class Circle extends Shape { private float radius; public Circle(float radius) { this.radius = radius; } @Override float getArea() { return (float) (Math.PI * radius * radius); } }
Terakhir, buat class Database db = new Database();8 untuk mencoba membuat objek dengan class yang sudah dibuat
public class Main { public static void main(String[] args) { // membuat objek dari class Triangle Shape segitiga = new Triangle(4, 5); // membuat objek dari class Circle Shape lingkaran = new Circle(10); System.out.println("Luas Segitiga: " + segitiga.getArea()); System.out.println("Luas Lingkaran: " + lingkaran.getArea()); } }
Coba perhatikan objek Database db = new Database();_9 dan abstract class Database { abstract String getDatabaseName(); abstract String getTableName(); }0. Kedua objek ini memiliki tipe yang sama yaitu class Database { String getTableName(){ return null; } } class MySQLDatabase extends Database { @override String getTableName(){ return this.sql("SELECT table_name FROM database.tabel") } }4, namun dibuat dari class yang berbeda
Nah, sekarang coba jalankan programnya. Jadi hasilnya
Apa perbedaan antara Kelas Abstrak dan Antarmuka?
Kelas abstrak dan antarmuka keduanya digunakan untuk membuat abstraksi
Keduanya memiliki karakteristik yang hampir sama. Tapi ada perbedaan
Apa itu?
- di kelas abstrak kita bisa membaut properti atau variabel sementara di antarmuka kita hanya bisa membuat konstanta
- di kelas abstrak kita bisa mengimplementasikan kode metode seperti kelas normal, sedangkan di antarmuka kita harus menggunakan abstract class Database { abstract String getDatabaseName(); abstract String getTableName(); }2
- di kelas abstrak dapat memiliki anggota abstract class Database { abstract String getDatabaseName(); abstract String getTableName(); }_3 dan abstract class Database { abstract String getDatabaseName(); abstract String getTableName(); }4 sedangkan antarmuka harus publik
- Kelas abstrak diimplementasikan dengan pewarisan (abstract class Database { abstract String getDatabaseName(); abstract String getTableName(); }5) sedangkan antarmuka menggunakan abstract class Database { abstract String getDatabaseName(); abstract String getTableName(); }6
Apa berikutnya?
Intinya, kelas abstrak adalah kelas yang bentuknya masih abstrak dan kita harus membuat bentuk yang konkret agar bisa digunakan.