Содержание
Пару дней назад я написал статью об основах Java: что такое интерфейс в Java и как он используется ? Этот учебник также связан с основами Java Abstract Class and Abstract Method «.
Что такое абстрактный класс?
Давайте сначала разберемся с классом Abstract, а затем перейдем к примеру.
- Абстрактный класс — это класс, который объявлен
abstract - Абстрактные классы не могут быть созданы
- Абстрактные классы могут быть разделены на подклассы
- Может включать или не включать абстрактные методы
- Когда абстрактный класс
subclassed, подкласс обычно обеспечивает реализации для всех абстрактных методов в своем родительском классе - Если подкласс не обеспечивает реализации, то подкласс также должен быть объявлен
abstract,
Это очень basic Java Interview Question , Вероятно, 1st Java Interview Question Вы получаете во время интервью.
Могу ли я определить абстрактный класс, не добавляя абстрактный метод?
Конечно да. Объявление абстрактного класса означает только то, что вы не позволяете создавать его экземпляр самостоятельно. Вы не можете иметь абстрактный метод в неабстрактном классе.
Что такое абстрактный метод?
-
abstract methodэто метод, который объявлен без реализации. - У него просто есть подпись метода.
Давайте начнем с примера. Описание проблемы:
- Создать класс
CrunchifyExam.java, который имеет один абстрактный метод с именемcheckResult() - Создать класс
Crunchify1stSchoolExamResult.java, расширяющий абстрактный классCrunchifyExam.java - Создать класс
Crunchify2ndSchoolExamResult.java, расширяющий абстрактный классCrunchifyExam.java - Теперь оба вышеупомянутых класса должны обеспечить реализацию для метода checkResult ()
- Обе школы могут иметь свои собственные
procedureили жеnumber of checksчтобы узнать, если пользовательPASSED or FAILEDони могут иметь собственную реализациюcheckResult()
|
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.java — Eclipse предложит вам реализовать абстрактные методы, упомянутые в CrunchifyExam.java
Crunchify1- й 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
|
пакет 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
|
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 в качестве интерфейса?
Что ж — Sure you could — но вам также необходимо реализовать getExamTime (), setExamTime (), getExamTime (), setExamTime () методы.
Используя абстрактные классы, вы можете наследовать реализацию других (неабстрактных) методов. Вы не можете сделать это с интерфейсами — интерфейс cannot provide любые реализации метода.
0.00 (0%) 0 votes





