Apa itu Kelas Abstrak dan Metode Abstrak di Jawa? Kapan saya harus menggunakannya? Tutorial Terlampir
Diterbitkan: 2019-09-12
Beberapa hari yang lalu saya menulis artikel tentang Java Fundamental dasar tentang Apa itu Antarmuka di Java dan Bagaimana Penggunaannya? Tutorial ini juga terkait dengan dasar Java fundamental “ Abstract Class and Abstract Method
”.
Apa itu Kelas Abstrak?
Mari kita mulai memahami kelas Abstrak terlebih dahulu dan kemudian kita akan membahas Contoh.
- Kelas abstrak adalah kelas yang dideklarasikan
abstract
- Kelas abstrak tidak dapat dipakai
- Kelas abstrak dapat disubklasifikasikan
- Ini mungkin atau mungkin tidak termasuk metode abstrak
- Ketika kelas abstrak
subclassed
, subkelas biasanya menyediakan implementasi untuk semua metode abstrak di kelas induknya - Jika subclass tidak menyediakan implementasi maka subclass juga harus dideklarasikan
abstract
.
Ini adalah basic Java Interview Question
. Mungkin 1 st Java Interview Question
yang Anda dapatkan saat wawancara.
Bisakah saya mendefinisikan kelas abstrak tanpa menambahkan metode abstrak?
Tentu saja ya. Mendeklarasikan abstrak kelas hanya berarti Anda tidak mengizinkannya untuk dipakai sendiri. Anda tidak dapat memiliki metode abstrak di kelas non-abstrak.
Apa itu Metode Abstrak?
-
abstract method
adalah metode yang dideklarasikan tanpa implementasi. - Itu hanya memiliki tanda tangan metode.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
package crunchify . com . tutorial ; /** * @author Crunchify.com * Simple Abstract Class and Method Example with live result * */ public abstract class CrunchifyExam { public enum ExamStatus { PASSED , FAILED } private String examTime ; private ExamStatus status ; public CrunchifyExam ( String examTime , ExamStatus status ) { this . examTime = examTime ; this . status = status ; } public String getExamTime ( ) { return examTime ; } public void setExamTime ( String examTime ) { this . examTime = examTime ; } public void setExamStatus ( ExamStatus status ) { this . status = status ; } public ExamStatus getExamStatus ( ) { return status ; } abstract public void checkResult ( ) ; } |
Mari kita mulai dengan Contoh. Deskripsi Masalah:
- Buat kelas
CrunchifyExam.java
, yang memiliki satu metode abstrak bernamacheckResult()
- Buat kelas
Crunchify1stSchoolExamResult.java
, yang memperluas kelas AbstrakCrunchifyExam.java
- Buat kelas
Crunchify2ndSchoolExamResult.java
, yang memperluas kelas AbstrakCrunchifyExam.java
- Sekarang kedua kelas di atas harus menyediakan implementasi untuk metode checkResult()
- Kedua Sekolah mungkin memiliki
procedure
ataunumber of checks
yang berbeda untuk mengetahui apakah penggunaPASSED or FAILED
, mereka bebas untuk menerapkancheckResult()
mereka sendiri
Setelah Anda memperluas kelas CrunchifyExam
di Crunchify1stSchoolExamResult.java
– Eclipse akan meminta Anda untuk mengimplementasikan metode Abstrak yang disebutkan dalam CrunchifyExam.java

Crunchify1st SchoolExamResult.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package crunchify . com . tutorial ; /** * @author Crunchify.com */ public class Crunchify1stSchoolExamResult extends CrunchifyExam { public Crunchify1stSchoolExamResult ( String examTime , ExamStatus status ) { super ( examTime , status ) ; // TODO Auto-generated constructor stub } @Override public void checkResult ( ) { String studentName = "Crunchify1" ; String studentResult = "85%" ; // School NO-1 will provide all their formula to find if user is passed or failed. // After detailed calculation let's say student's grade is "PASSED". System . out . println ( "Hey.. this is user " + studentName + " with grade " + studentResult + " - " + getExamStatus ( ) + ", ExamTime: " + getExamTime ( ) ) ; } } |
Crunchify2 nd SchoolExamResult.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
package crunchify . com . tutorial ; import java . text . DateFormat ; import java . text . SimpleDateFormat ; import java . util . Date ; /** * @author Crunchify.com */ public class Crunchify2ndSchoolExamResult extends CrunchifyExam { public Crunchify2ndSchoolExamResult ( String examTime , ExamStatus status ) { super ( examTime , status ) ; } @Override public void checkResult ( ) { String studentName = "Crunchify2" ; String studentResult = "45%" ; // School NO-2 will provide all their formula to find if user is passed or failed. // After detailed calculation let's say student's grade is "FAILED". log ( "Hey.. this is user " + studentName + " with grade " + studentResult + " - " + getExamStatus ( ) + ", ExamTime: " + getExamTime ( ) ) ; } public static void main ( String args [ ] ) { DateFormat dateFormat = new SimpleDateFormat ( "yyyy/MM/dd HH:mm:ss" ) ; // 1st School's checkResult() Date date = new Date ( ) ; String examTime = dateFormat . format ( date ) ; log ( "Initializing 1st School object at time " + examTime ) ; // We are setting up time and Result for 1st School Crunchify1stSchoolExamResult object = new Crunchify1stSchoolExamResult ( examTime , ExamStatus . PASSED ) ; object . checkResult ( ) ; // Let's wait 5 seconds wait to see time difference in console log try { Thread . sleep ( 5000 ) ; } catch ( InterruptedException e ) { e . printStackTrace ( ) ; } // 2nd School's checkResult() date = new Date ( ) ; examTime = dateFormat . format ( date ) ; log ( "\nInitializing 2nd School object at time " + examTime ) ; // We are setting up time and Result for 2nd School Crunchify2ndSchoolExamResult object2 = new Crunchify2ndSchoolExamResult ( examTime , ExamStatus . FAILED ) ; object2 . checkResult ( ) ; } // Simple log method private static void log ( String value ) { System . out . println ( value ) ; } } |
Hasil Konsol Eclipse:
Cukup klik kanan pada Crunchify2ndSchoolExamResult.java
dan jalankan sebagai Java Application
untuk melihat hasil di bawah ini.

1 2 3 4 5 |
Initializing 1st School object at time 2016 / 11 / 30 14 : 24 : 37 Hey . . this is user Crunchify1 with grade 85 % - PASSED ExamTime : 2016 / 11 / 30 14 : 24 : 37 Initializing 2nd School object at time 2016 / 11 / 30 14 : 24 : 42 Hey . . this is user Crunchify2 with grade 45 % - FAILED ExamTime : 2016 / 11 / 30 14 : 24 : 42 |
Sekarang Anda mungkin memiliki pertanyaan
Mengapa saya tidak dapat menggunakan Antarmuka di sini daripada memiliki Abstract Method
dan Class
Abstrak dan memiliki CrunchifyExam sebagai Antarmuka?
Yah – Sure you could
– tetapi Anda juga perlu menerapkan metode getExamTime
(), setExamTime
(), getExamTime
(), setExamTime
().
Dengan menggunakan kelas abstrak, Anda dapat mewarisi implementasi metode lain (non-abstrak). Anda tidak dapat melakukannya dengan antarmuka – antarmuka cannot provide
implementasi metode apa pun.
Apakah mungkin membuat kelas abstrak dan final di Jawa?
- Abstrak dan final adalah konsep yang saling eksklusif.
- Jadi jawabannya TIDAK, kita tidak bisa membuat kelas abstrak atau metode final di Jawa.
- Kelas akhir adalah kelas selesai dan tidak dapat diperpanjang lagi.
- Kelas abstrak disebut kelas tidak lengkap dan hanya dapat diperluas oleh kelas konkret lainnya dan Anda harus mengimplementasikan semua metode abstrak.
- Juga, tidak ada cara dan tidak mungkin untuk memiliki metode abstrak di kelas akhir.
Apakah mungkin untuk mewarisi dari beberapa kelas abstrak di Jawa?
- Java tidak mendukung pewarisan berganda.
- Di java kita hanya bisa Memperpanjang satu kelas.
- Di Java kita dapat mengimplementasikan Antarmuka dari banyak sumber.