Домой Учебники по Java и J2EE Что такое абстрактный класс и абстрактный метод в Java? Когда я должен...

Что такое абстрактный класс и абстрактный метод в Java? Когда я должен использовать это? Учебник прилагается

715
0

Пару дней назад я написал статью об основах Java: что такое интерфейс в Java и как он используется ? Этот учебник также связан с основами Java Abstract Class and Abstract Method «.

Что такое абстрактный класс?

Давайте сначала разберемся с классом Abstract, а затем перейдем к примеру.

  • Абстрактный класс — это класс, который объявлен abstract
  • Абстрактные классы не могут быть созданы
  • Абстрактные классы могут быть разделены на подклассы
  • Может включать или не включать абстрактные методы
  • Когда абстрактный класс subclassed , подкласс обычно обеспечивает реализации для всех абстрактных методов в своем родительском классе
  • Если подкласс не обеспечивает реализации, то подкласс также должен быть объявлен abstract ,

Это очень basic Java Interview Question , Вероятно, 1st Java Interview Question Вы получаете во время интервью.

Могу ли я определить абстрактный класс, не добавляя абстрактный метод?

Конечно да. Объявление абстрактного класса означает только то, что вы не позволяете создавать его экземпляр самостоятельно. Вы не можете иметь абстрактный метод в неабстрактном классе.

Что такое абстрактный метод?

  • abstract method это метод, который объявлен без реализации.
  • У него просто есть подпись метода.

Давайте начнем с примера. Описание проблемы:

  1. Создать класс CrunchifyExam.java , который имеет один абстрактный метод с именем checkResult()
  2. Создать класс Crunchify1stSchoolExamResult.java , расширяющий абстрактный класс CrunchifyExam.java
  3. Создать класс Crunchify2ndSchoolExamResult.java , расширяющий абстрактный класс CrunchifyExam.java
  4. Теперь оба вышеупомянутых класса должны обеспечить реализацию для метода checkResult ()
  5. Обе школы могут иметь свои собственные procedure или же number of checks чтобы узнать, если пользователь PASSED or FAILED они могут иметь собственную реализацию checkResult()
CrunchifyExam.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
пакет crunchify. ком . учебник ;
/ **
* @author Crunchify.com
* Простой абстрактный класс и пример метода с живым результатом
*
* /
общественности Аннотация учебный класс CrunchifyExam {
общественности перечисление ExamStatus {
Пройдено , НЕ УДАЛОСЬ
}
частный строка examTime ;
частный Статус ExamStatus ;
общественности CrunchifyExam ( Строка examTime , Статус ExamStatus ) {
это. время экзамена знак равно examTime ;
это. статус знак равно статус ;
}
общественности строка getExamTime ( ) {
вернуть examTime ;
}
общественности недействительным setExamTime ( String examTime ) {
это. время экзамена знак равно examTime ;
}
общественности недействительным setExamStatus ( статус ExamStatus ) {
это. статус знак равно статус ;
}
общественности ExamStatus getExamStatus ( ) {
вернуть статус ;
}
Аннотация общественности недействительным checkResult ( ) ;
}

Как только вы продлите CrunchifyExam класс в Crunchify1stSchoolExamResult.javaEclipse предложит вам реализовать абстрактные методы, упомянутые в CrunchifyExam.java

Crunchify1- й SchoolExamResult.java

Crunchify1stSchoolExamResult.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
пакет crunchify. ком . учебник ;
/ **
* @author Crunchify.com
* /
общественности учебный класс Crunchify1stSchoolExamResult продолжается CrunchifyExam {
общественности Crunchify1stSchoolExamResult ( String examTime , Статус ExamStatus ) {
супер ( examTime , статус ) ;
// TODO Автоматически сгенерированная заглушка конструктора
}
@Override
общественности недействительным checkResult ( ) {
строка Имя ученика знак равно Crunchify1 ;
строка studentResult знак равно 85% ;
// Школа № 1 предоставит всю свою формулу, чтобы найти, пройден ли пользователь или нет.
// После детального подсчета скажем, что оценка ученика «ПРОЙДЕНА».
Система. вне. println ( Эй .. это пользователь + Имя ученика + с оценкой + studentResult + + getExamStatus ( )
+ , Время экзамена: + getExamTime ( ) ) ;
}
}

Crunchify2 nd SchoolExamResult.java

Crunchify2ndSchoolExamResult.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
пакет crunchify. ком . учебник ;
Импортировать Java. текст. DateFormat ;
Импортировать Java. текст. SimpleDateFormat ;
Импортировать Java. Util. Дата ;
/ **
* @author Crunchify.com
* /
общественности учебный класс Crunchify2ndSchoolExamResult продолжается CrunchifyExam {
общественности Crunchify2ndSchoolExamResult ( String examTime , Статус ExamStatus ) {
супер ( examTime , статус ) ;
}
@Override
общественности недействительным checkResult ( ) {
строка Имя ученика знак равно Crunchify2 ;
строка studentResult знак равно 45% ;
// Школа № 2 предоставит всю свою формулу, чтобы найти, пройден ли пользователь или нет.
// После подробного расчета скажем, что оценка ученика — «НЕИСПРАВНО».
log ( Эй .. это пользователь + Имя ученика + с оценкой + studentResult + + getExamStatus ( ) + , Время экзамена:
+ getExamTime ( ) ) ;
}
общественности статический недействительным главная ( Строка args [ ] ) {
DateFormat dateFormat знак равно новый SimpleDateFormat ( гггг / мм / дд чч: мм: сс ) ;
// 1-я школа checkResult ()
Дата дата знак равно новый Дата ( ) ;
строка время экзамена знак равно dateFormat . формат ( дата ) ;
журнал ( «Инициализация объекта 1-й школы во время» + examTime ) ;
// Мы настраиваем время и результат для 1-й школы
Crunchify1stSchoolExamResult объект знак равно новый Crunchify1stSchoolExamResult ( examTime , ExamStatus . Пройдено ) ;
объект . checkResult ( ) ;
// Давайте подождем 5 секунд, чтобы увидеть разницу во времени в журнале консоли
пытаться {
Thread. сон ( 5000 ) ;
} ловить ( InterruptedException е ) {
эл . printStackTrace ( ) ;
}
// 2-я школа checkResult ()
Дата знак равно новый Дата ( ) ;
время экзамена знак равно dateFormat . формат ( дата ) ;
log ( / nИнициализация объекта 2-ой школы во время + examTime ) ;
// Мы настраиваем время и результат для 2-й школы
Crunchify2ndSchoolExamResult object2 знак равно новый Crunchify2ndSchoolExamResult ( examTime , ExamStatus . Не удалось ) ;
объект2 . checkResult ( ) ;
}
// Простой метод журнала
частный статический недействительным log ( Строка ценность ) {
Система. вне. println ( значение ) ;
}
}

Eclipse Console Результат:

Просто щелкните правой кнопкой мыши на Crunchify2ndSchoolExamResult.java и беги как Java Application чтобы увидеть результат ниже.

1
2
3
4
5
Инициализация первый Школьный объект во время 2 016/11/30 14 : 24 : 37
Эй. , этот является пользователь Crunchify1 с оценкой 85 % ПРОШЛО ExamTime: 2 016/11/30 14 : 24 : 37
Инициализация второй Школьный объект во время 2 016/11/30 14 : 24 : 42
Эй. , этот является пользователь Crunchify2 с оценкой 45 % FAILED ExamTime: 2 016/11/30 14 : 24 : 42

Теперь у вас может возникнуть вопрос

Почему я не могу использовать интерфейс здесь вместо Abstract Method а также Class и есть CrunchifyExam в качестве интерфейса?

ЧИТАТЬ ТАКЖЕ:  Как исправить исключение в потоке main - java.lang.IllegalMonitorStateException Ошибка в Thread.wait ()

Что ж — Sure you could — но вам также необходимо реализовать getExamTime (), setExamTime (), getExamTime (), setExamTime () методы.

Используя абстрактные классы, вы можете наследовать реализацию других (неабстрактных) методов. Вы не можете сделать это с интерфейсами — интерфейс cannot provide любые реализации метода.

Что такое абстрактный класс и абстрактный метод в Java? Когда я должен использовать это? Учебник прилагается

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь