Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/120: Рейтинг темы: голосов - 120, средняя оценка - 4.89
4 / 1 / 0
Регистрация: 14.02.2017
Сообщений: 125

Создание иерархии классов: магазин электротоваров

23.02.2019, 18:45. Показов 23674. Ответов 48
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане, нужно создать программу. В программе должны присутствовать: иерархия классов с указанием ключевых полей, свойств и методов для предметной области магазин электротоваров. Иерархия классов должна быть такой как на рисунке.

1. В каждом классе должно быть как минимум 3 поля.
2. Изменять значения поля можно только через методы.
3. Реализовать, как минимум 2 метода, в которых бы использовался
полиморфизм.
4. В программе должна быть предусмотрена возможность создания
экземпляров всех классов (кроме абстрактных) и задания и просмотра
соответствующих полей и результатов выполнения методов.

Я не прошу (пока) писать сам код, хочу все сам сделать. Мне нужны названия классов, которые подойдут к этой иерархии по предметной области и их поля. Так как у самого в голову ни одной идеи не лезет.

Еще раз повторюсь методы и сам код создания классов не писать (пока что ), хочу все сам сделать.
Миниатюры
Создание иерархии классов: магазин электротоваров  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.02.2019, 18:45
Ответы с готовыми решениями:

Создание иерархии классов
Здравствуйте, помогите, пожалуйста с заданием. Разработать иерархию из следующих классов, необходимых для реализации модели зоопарка: ...

Создание иерархии классов и интерфейсов
Помогите пожалуйста, нужно написать курсач на тему "создание иерархии классов и интерфейсов в предметной области животные". Я не знаю...

Создание иерархии классов: студент, преподаватель, декан
Помогите пожалуйста, понять как сделать. Есть задание: создать классы, описывающие студента, преподавателя, декана. Определить методы для...

48
 Аватар для vvm28
773 / 541 / 67
Регистрация: 22.12.2013
Сообщений: 2,500
Записей в блоге: 26
02.03.2019, 05:16
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Владислав_Никол Посмотреть сообщение
А такой вопрос метод с полиморфизмом должен охватывать все классы в иерархии или нет?
Смотря что вы хотите. Смотрите модификаторы доступа public, protected, private.
Как они наследуются, как переопределяются и перегружаются методы.
Ищите это "Перегрузка и переопределение методов и полей класса."
0
4 / 1 / 0
Регистрация: 14.02.2017
Сообщений: 125
03.03.2019, 00:34  [ТС]
Вообщем написал так вот код:
По схеме в шапке темы 1 класс базовый абстрактный.
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
// Абстрактный класс персоны поликлиники
public abstract class PersonPolyclinic {
    private String Fio;// ФИО 
    private int age;// Возраст
    private String sex;// Пол
    
    public PersonPolyclinic(String Fio, int age, String sex) {
        this.Fio = Fio;
        this.age = age;
        this.sex = sex;
    }
    
    public String getFio() {
        return Fio;
    }
    
    public void setFio(String Fio) {
        this.Fio = Fio;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
    
    public String getSex() {
        return sex;
    }
    
    public void setNumber(String sex) {
        this.sex = sex;
    }
}
3. класс Пациенты
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
public class Patient extends PersonPolyclinic {
    private int numberPatient;// Номер пациента
    private int numberCard;// Номер карточки клиента
    private String diagnosis;// Диагноз
 
    public Patient(int numberPatient, String Fio, int age, String sex, int numberCard, String diagnosis) {
        super(Fio, age, sex);
        this.numberPatient = numberPatient;
        this.numberCard = numberCard;
        this.diagnosis = diagnosis;
 
    }
    
    public int getNumberPatient() {
            return numberPatient;
    }
     
    public void setNumberPatient(int numberPatient) {
            this.numberPatient = numberPatient;
    }
    
    public int getNumberDoctor() {
        return numberCard;
    }
 
    public void setNumberCard(int numberCard) {
        this.numberCard = numberCard;
    }
    
    public String getDiagnosis() {
        return diagnosis;
    }
    
    public void setDiagnosis(String diagnosis) {
        this.diagnosis = diagnosis;
    }
}
2. класс Доктор тоже абстрактный
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
public abstract class Doctor extends PersonPolyclinic {
    private String experience;// Стаж
    private int salary;// Зарплата
    private String category;// Категория
    
    public Doctor(String Fio, int age, String sex, String experience,
            int salary, String category) {
        super(Fio, age, sex);
        this.experience = experience;
        this.salary = salary;
        this.category = category;
    }
    
    public String getExperience() {
        return experience;
    }
    
    public void setExperience(String experience) {
        this.experience = experience;
    }
    
    public int getSalary() {
        return salary;
    }
    
    public void setNumberPatient(int salary) {
        this.salary = salary;
    }
    
    public String getCategory() {
        return category;
    }
    
    public void setCategory(String category) {
        this.category = category;
    }
    
    public void Analysis() {
        System.out.println("Доктор" + getFio() + " велел сдать анализ:" + "  ");
    }
}
В нем есть метод
Java
1
2
3
    public void Analysis() {
        System.out.println("Доктор" + getFio() + " велел сдать анализ:" + "  ");
    }
4. класс Хирург
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
public class Surgeon extends Doctor{
    private int numbeSurgeon;// Номер хирурга
    private String specialization;// Специализация
    private int kolOperations;// Количество операций
    
    public Surgeon(int numbeSurgeon, String Fio, int age, String sex, 
            int salary, String category, String specialization, int kolOperations, String experience) {
        super(Fio, age, sex, experience, salary, category);
        this.specialization = specialization;
        this.kolOperations = kolOperations;
        this.numbeSurgeon = numbeSurgeon;
    }
    
    public String getSpecialization() {
        return specialization;
    }
    
    public void setSpecialization(String specialization) {
        this.specialization = specialization;
    }
    
    public int getKolOperations() {
        return kolOperations;
    }
    
    public void setKolOperations(int kolOperations) {
        this.kolOperations = kolOperations;
    }
    
    public int getNumbeSurgeon() {
        return numbeSurgeon;
    }
    
    public void setNumbeSurgeon(int numbeSurgeon) {
        this.numbeSurgeon = numbeSurgeon;
    }
    
    @Override
    public void Analysis() {
        System.out.println("Хирург: " + "номер-" + getNumbeSurgeon()+ " " + getFio() + " велел сдать анализ:" + " Крови, мочи. ");
    }
}
В нем есть метод который переопределяет метод класса Доктор.
Java
1
2
3
4
@Override
    public void Analysis() {
        System.out.println("Хирург: " + "номер-" + getNumbeSurgeon()+ " " + getFio() + " велел сдать анализ:" + " Крови, мочи. ");
    }
5. класс Терапевт
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
public class Therapist extends Doctor{
    private int numberTherapist;// Номер терапевта
    private String degree;// Ученая степень
    private String workingHours;// Рабочее время
    
    public Therapist(int numberTherapist, String Fio, int age, String sex, 
            int salary, String category, String experience, String degree, String workingHours) {
        super(Fio, age, sex, experience, salary, category);
        this.numberTherapist = numberTherapist;
        this.degree = degree;
        this.workingHours = workingHours;
    }
    
    public int getNumberTherapist() {
        return numberTherapist;
    }
    
    public void setNumberTherapist(int numberTherapist) {
        this.numberTherapist = numberTherapist;
    }
    
    public String getDegree() {
        return degree;
    }
    
    public void setDegree(String degree) {
        this.degree = degree;
    }
    
    public String getWorkingHours() {
        return workingHours;
    }
    
    public void setWorkingHours(String workingHours) {
        this.workingHours = workingHours;
    }
    
    @Override
    public void Analysis() {
        System.out.println("Терапевт: " + "номер-" + getNumberTherapist() + " " + getFio() + " велел сдать анализ:" + " Кала. ");
    }
}
В нем также есть метод который переопределяет метод класса доктор.
Java
1
2
3
4
 @Override
    public void Analysis() {
        System.out.println("Терапевт: " + "номер-" + getNumberTherapist() + " " + getFio() + " велел сдать анализ:" + " Кала. ");
    }
Вопрос теперь с полиморфизмом все верно? или я опять что-то напутал?
И если все верно скиньте идею насчет второго метода с полиморфизмом только что-нибудь другое что бы отличался от первого, а то в голову лезут одни похожие методы.

И появился еще вопрос захотел сделать цикл как в посте 13, что бы выводились стразу все записи про анализы. Но думается мне что такой цикл в пример не подойдет?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
03.03.2019, 09:05
Цитата Сообщение от Владислав_Никол Посмотреть сообщение
с полиморфизмом все верно?
Все норм! Его тут нет
0
4 / 1 / 0
Регистрация: 14.02.2017
Сообщений: 125
03.03.2019, 11:10  [ТС]
Серьезно, да что опять не так?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
03.03.2019, 11:33
Владислав_Никол, теперь тебе нужно создать какой-то тестовый класс, в котором будут взаимодействовать экземпляры вышеприведенной иерархии. Вот именно там и можно будет рассматривать полиморфизм. Сейчас ты просто переопределил некоторые методы, но это пока ничего не значит и не проясняет.
0
4 / 1 / 0
Регистрация: 14.02.2017
Сообщений: 125
03.03.2019, 18:14  [ТС]
iSmokeJC, А так у меня есть такой класс.
Вот
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class TestProgramm {
 
    public static void main(String[] args) {
        Patient pt1 = new Patient(55, "Носов Николай Петрович", 34, "мужской", 486469, "ОРВИ");
        Patient pt2 = new Patient(44, "Кротов Михаил Николаевич", 25, "мужской", 645566, "Бронхит");
        
        Surgeon su1 = new Surgeon(365, "Машков Дмитрий Александрович", 43, "мужской", 60000, "Вторая", "Глазной хирург", 34, "25 лет");
        
        Therapist the1 = new Therapist(268, "Огурцов Михаил Дмитрович", 43, "мужской", 30000, "Вторая", "10 лет", "Кандидат наук", "с 9:00 до 13:00");       
        
        su1.Analysis();
        the1.Analysis();
    }
 
}
То есть полиморфизм рассматривается там где этот метод вызывается так что ли?

Добавлено через 2 минуты
Только я не пойму как по вашему примеру в посте №13 сделать цикл.
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
03.03.2019, 18:37
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
public class TestPol {
    public static void main(String[] args) {
        One one = new One();
        One two = new Two();
 
        one.print();
        two.print();
    }
}
 
class One {
    public void print() {
        System.out.println("Class One");
    }
}
 
class Two extends One {
    @Override
    public void print() {
        System.out.println("Class Two");
    }
 
    public void iter(int i) {
        System.out.println(i + 1);
    }
 
    public void iter(double i) {
        System.out.println(i + 1);
    }
}
Добавлено через 2 минуты
тут 2 полиморфизма:

1. Мы оверлоадим (перегружаем) в класс Two метод iter. (название одинаковое, входные параметры разные)
2. в классе Two оверайдим метод print

теперь инициализируя переменную типа One, а создав объект типа Two, произойдёт динамическое связывание и вызовется метод из класса Two

Добавлено через 1 минуту
для чего это нужно. Чтоб даже не зная, как будет реализован метод в наследниках, мы могли его использовать. Java сама свяжет метод динамически.

Добавлено через 9 минут
Более подробно:

допустим написал ты какой-то класс Array для работы с массивом.

затем в другом классе у кого-то есть метод, который принимает твой класс

к примеру:
public void printArray(Array array) {
array.print;
}


допустим через год создадут новый класс, наследник твоего Array

class SuperArray extends Array и переопределят твой метод print

так вот, человеку, который написал этот метод:
public void printArray(Array array) {
array.print;
}

не придётся добавлять новый метод для SupperArray.

просто в метод будут передавать так printArray(new SupperArray) и в методе вызовется метод print не класса Array,ауже класса SuperArray

Добавлено через 2 минуты
P.S. Я не очень хорошо объясняю, но я старался )))
0
4 / 1 / 0
Регистрация: 14.02.2017
Сообщений: 125
04.03.2019, 00:28  [ТС]
ArtemFM, Это вы написали в пример какие могут быть полиморфизмы или камень в мой огород за мой метод с полиморфизмом который я пытался сделать?

Добавлено через 1 минуту
Просто мне так пока и не сказали правильно ли я сделал или нет.
0
4 / 1 / 0
Регистрация: 14.02.2017
Сообщений: 125
04.03.2019, 14:52  [ТС]
Народ создал метод для вывода информации объекта класса.
Java
1
2
3
public String InfoPatient (){
        return "Класс пациенты!" + "/n" + "--------------------" + "/n" + "Идентификационный номер пациента:" + "/n" + getNumberPatient() + "/n" + Info() + "/n" + "Номер карточки:" + "/n" + getNumberCard() + "/n" + "Диагноз" + "/n" + getDiagnosis();
    }
Но в классе их например 4, писать вызов метода к каждому объекту ну глупо так как можно вызвать один метод сразу ко всем объектам. Знаю что можно сделать что-то подобное через
Java
1
2
3
4
public static void Info(List<Patient> patients) {
        for (Patient patient : patients) {
            System.out.println(patient .название поля + " " + patient.название поля);
        }
Но это не много не то. Так как static метод используется чисто для класса и в нем нельзя использовать другие методы из других классов.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
04.03.2019, 15:14
Владислав_Никол, вот ты потихоньку и подходишь к осознанию полморфизма...
0
4 / 1 / 0
Регистрация: 14.02.2017
Сообщений: 125
04.03.2019, 15:44  [ТС]
iSmokeJC, Всмысле? Полиморфизм нужен для того что бы один метод использовался для всех наследуемых классов, скажите что я не прав. При чем тут мой вопрос в посте №29? Моя конечно вина не так объяснил наверно.

У меня в классе есть метод
Java
1
2
3
public String InfoPatient (){
* * * * return "Класс пациенты!" + "/n" + "--------------------" + "/n" + "Идентификационный номер пациента:" + "/n" + getNumberPatient() + "/n" + Info() + "/n" + "Номер карточки:" + "/n" + getNumberCard() + "/n" + "Диагноз" + "/n" + getDiagnosis();
* * }
Я не хочу его вызывать так
Java
1
System.out.println(pt1.InfoPatient());
к каждому экземпляру
Java
1
Patient pt1 = new Patient(55, "Носов Николай Петрович", 34, "мужской", 486469, "ОРВИ");
так как их может быть миллион. Ведь наверника есть адекватный способ

Добавлено через 10 минут
iSmokeJC, К тому же вы так и не сказали правильно ли я сделал метод с полиморфизмом.
Цитата Сообщение от iSmokeJC Посмотреть сообщение
теперь тебе нужно создать какой-то тестовый класс, в котором будут взаимодействовать экземпляры вышеприведенной иерархии. Вот именно там и можно будет рассматривать полиморфизм. Сейчас ты просто переопределил некоторые методы, но это пока ничего не значит и не проясняет.
Вот
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class TestProgramm {
 
    public static void main(String[] args) {
        Patient pt1 = new Patient(55, "Носов Николай Петрович", 34, "мужской", 486469, "ОРВИ");
        Patient pt2 = new Patient(44, "Кротов Михаил Николаевич", 25, "мужской", 645566, "Бронхит");
        
        Surgeon su1 = new Surgeon(365, "Машков Дмитрий Александрович", 43, "мужской", 60000, "Вторая", "Глазной хирург", 34, "25 лет");
        
        Therapist the1 = new Therapist(268, "Огурцов Михаил Дмитрович", 43, "мужской", 30000, "Вторая", "10 лет", "Кандидат наук", "с 9:00 до 13:00");       
        
        su1.Analysis();
        the1.Analysis();
    }
 
}
Иначе я не пойму тогда про какой тестовый класс вы говорите.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
04.03.2019, 16:16
Цитата Сообщение от Владислав_Никол
вы так и не сказали правильно ли я сделал метод с полиморфизмом

Фраза - 'метод с полиморфизмом' вообще убийственная.
У тебя нет метода, использующего полиморфизм.
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
04.03.2019, 16:24
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class TestProgramm {
 
    public static void main(String[] args) {
        Patient pt1 = new Patient(55, "Носов Николай Петрович", 34, "мужской", 486469, "ОРВИ");
        Patient pt2 = new Patient(44, "Кротов Михаил Николаевич", 25, "мужской", 645566, "Бронхит");
        
        Surgeon su1 = new Surgeon(365, "Машков Дмитрий Александрович", 43, "мужской", 60000, "Вторая", "Глазной хирург", 34, "25 лет");
        
        Therapist the1 = new Therapist(268, "Огурцов Михаил Дмитрович", 43, "мужской", 30000, "Вторая", "10 лет", "Кандидат наук", "с 9:00 до 13:00");       
        
        su1.Analysis();
        the1.Analysis();
    }
 
}
Тут не добьёшься полиморфизма, потому что ты объявляешь переменную типом таким, каким и создаёшь объект:

Patient pt1 = new Patient(55, "Носов Николай Петрович", 34, "мужской", 486469, "ОРВИ");

у тебя есть абстрактный класс PersonPoliclinic

вот и объявляй всё типом PersonPoliclinic

PersonPoliclinic pt1 = new Patient(55, "Носов Николай Петрович", 34, "мужской", 486469, "ОРВИ");
PersonPoliclinic su1 = new Surgeon(365, "Машков Дмитрий Александрович", 43, "мужской", 60000, "Вторая", "Глазной хирург", 34, "25 лет");
0
4 / 1 / 0
Регистрация: 14.02.2017
Сообщений: 125
04.03.2019, 16:43  [ТС]
ArtemFM, Прошу если не трудно покажите метод с использованием полиморфизма с моей иерархии классов. Я хотя бы пойму где я так туплю, а второй метод я сам попробую реализовать. А то на простых примерах даже в учебниках с классами животных там понятно, но пытаюсь сделать у себя и выгляжу полным дЭбилом.
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
04.03.2019, 17:05
Лучший ответ Сообщение было отмечено Владислав_Никол как решение

Решение

смотри суть в чём. Вот у тебя есть абстрактный класс PersonPoliclinic
остальные классы ты наследуешь от него...

допустим, от него наследуется Doctor и Pacient. Ты в абстрактном классе можешь реализовать какой-то метод, к примеру...
и допустим он будет работать одинаково для Doctor и Patcient. Следовательно ты его реализуешь только в абстрактном классе и всё... переопределять его не нужно, ибо он работает одинаково и для Doctor и Patcient.

Теперь двигаемся дальше. Ну допустим ты сделал класс Terapevt. И вдруг ты понял, что именно для терапевта общий метод в абстрактном классе не подходит... И ты решил его переопределить и реализовать его по другому. Ок, идём дальше.
затем ты создал класс Хирург. Допустим ты подумал и решил,что у Хирурга общего больше сТерапевтом, чем с Доктором и метод, который ты переопределил в Терапевте как раз подходит и для Хирурга... Следовательно ты Хирурга наследуешь от Терапевта и не переопределяешь метод, реализованный в Терапевте ибо он и так классно работает...

Теперь подошли кглавному

Добавлено через 3 минуты
когда ты создаёшь классы, ты объявляешь переменную как можно ниже по иерархии

у тебя сделано как: Хирург хирург = нью Хирург, Доктор доктор = нью Доктор.
Так ты не добьёшься полиморфизма, ибо ты просто создал класс и объявлил от одного класса

А вот теперь самое интересное
Если ты сделаешь так:
Абстрактный класс пациент = нью Пациент;
Абстрактный класс доктор = нью Доктор;
Абстрактный класс терапевт = нью Терапевт;

что это даст? пациент, доктор и терапевт будут типа абстрактный класс

Добавлено через 1 минуту
значит у этих переменных будут доступны все методы из Абстрактного класса...

Мы помним, что у нас идёт иерархия: Абстрактный класс <- Терапевт <- Хирург
Мы помним, что в Хирурге нет метода, который переопределён в Терапевте, да и не к чему, реализация в Терапевте подходит и для Хирурга

Добавлено через 2 минуты
Так вот, если ты вызовешь у переменной хирург этот метод, то что сделает Java.
Она посмотрит таблицу наследников и зайдёт в хирург. Увидит, что метод там не риализован, спустится на иерархию ниже - это терапевт. Ага, там есть этот метод. Вот его она и запустит. Допустим и там не было бы этого метода, тогда Джава спустилась ещё ниже к родителю (или поднялась, не знаю как правильнее сказать) и в итоге, если он нигде не переопределён, то запустила по цепочке из того класса, гдеон реализован

Добавлено через 46 секунд
А если бы ты создал объект Хирург = нью Хирург, ты б даже этот метод не смог использовать, ибо его там и нет.
1
4 / 1 / 0
Регистрация: 14.02.2017
Сообщений: 125
05.03.2019, 00:27  [ТС]
ArtemFM, Подожди по задумке у меня класс хирург не наследуется от терапевта, они оба наследуются от класса доктор. Вот схема.
Миниатюры
Создание иерархии классов: магазин электротоваров  
0
4 / 1 / 0
Регистрация: 14.02.2017
Сообщений: 125
05.03.2019, 00:31  [ТС]
И абстрактных класса у меня два персоны поликлиники и доктор.

Добавлено через 3 минуты
Сейчас попробую переварить вашу инфу.
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
05.03.2019, 15:00
я тебе пример приводил. Не смотрел как у тебя сделано, а просто пример из головы )
0
4 / 1 / 0
Регистрация: 14.02.2017
Сообщений: 125
05.03.2019, 19:42  [ТС]
ArtemFM, Все теперь я понял!
Вот сделал так:
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
// Абстрактный класс персоны поликлиники
public abstract class PersonPolyclinic {
    private String Fio;// ФИО 
    private int age;// Возраст
    private String sex;// Пол
    
    public PersonPolyclinic(String Fio, int age, String sex) {
        this.Fio = Fio;
        this.age = age;
        this.sex = sex;
    }
    
    public String getFio() {
        return Fio;
    }
    
    public void setFio(String Fio) {
        this.Fio = Fio;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
    
    public String getSex() {
        return sex;
    }
    
    public void setNumber(String sex) {
        this.sex = sex;
    }
    
    public String Analysis() {
        return "Доктор" + getFio() + " велел сдать анализ:" + "  ";
    }
 
}
 
public abstract class Doctor extends PersonPolyclinic {
    private String experience;// Стаж
    private String salary;// Зарплата
    private String category;// Категория
    
    public Doctor(String Fio, int age, String sex, String experience,
            String salary, String category) {
        super(Fio, age, sex);
        this.experience = experience;
        this.salary = salary;
        this.category = category;
    }
    
    public String getExperience() {
        return experience;
    }
    
    public void setExperience(String experience) {
        this.experience = experience;
    }
    
    public String getSalary() {
        return salary;
    }
    
    public void setSalary(String salary) {
        this.salary = salary;
    }
    
    public String getCategory() {
        return category;
    }
    
    public void setCategory(String category) {
        this.category = category;
    }
}
 
 
public class Patient extends PersonPolyclinic {
    private int numberPatient;// Номер пациента
    private int numberCard;// Номер карточки клиента
    private String diagnosis;// Диагноз
 
    public Patient(int numberPatient, String Fio, int age, String sex, int numberCard, String diagnosis) {
        super(Fio, age, sex);
        this.numberPatient = numberPatient;
        this.numberCard = numberCard;
        this.diagnosis = diagnosis;
 
    }
    
    public int getNumberPatient() {
            return numberPatient;
    }
     
    public void setNumberPatient(int numberPatient) {
            this.numberPatient = numberPatient;
    }
    
    public int getNumberCard() {
        return numberCard;
    }
 
    public void setNumberCard(int numberCard) {
        this.numberCard = numberCard;
    }
    
    public String getDiagnosis() {
        return diagnosis;
    }
    
    public void setDiagnosis(String diagnosis) {
        this.diagnosis = diagnosis;
    }
    
}
 
 
public class Surgeon extends Doctor{
    private int numbeSurgeon;// Номер хирурга
    private String specialization;// Специализация
    private int kolOperations;// Количество операций
    
    public Surgeon(int numbeSurgeon, String Fio, int age, String sex, 
            String salary, String category, String specialization, int kolOperations, String experience) {
        super(Fio, age, sex, experience, salary, category);
        this.specialization = specialization;
        this.kolOperations = kolOperations;
        this.numbeSurgeon = numbeSurgeon;
    }
    
    public String getSpecialization() {
        return specialization;
    }
    
    public void setSpecialization(String specialization) {
        this.specialization = specialization;
    }
    
    public int getKolOperations() {
        return kolOperations;
    }
    
    public void setKolOperations(int kolOperations) {
        this.kolOperations = kolOperations;
    }
    
    public int getNumbeSurgeon() {
        return numbeSurgeon;
    }
    
    public void setNumbeSurgeon(int numbeSurgeon) {
        this.numbeSurgeon = numbeSurgeon;
    }
    
    @Override
    public String Analysis() {
        return "Хирург: " + "номер-" + getNumbeSurgeon()+ " " + getFio() + " велел сдать анализ:" + " Крови, мочи.";
    }
}
 
 
public class Therapist extends Doctor{
    private int numberTherapist;// Номер терапевта
    private String degree;// Ученая степень
    private String workingHours;// Рабочее время
    
    public Therapist(int numberTherapist, String Fio, int age, String sex, 
            String salary, String category, String experience, String degree, String workingHours) {
        super(Fio, age, sex, experience, salary, category);
        this.numberTherapist = numberTherapist;
        this.degree = degree;
        this.workingHours = workingHours;
    }
    
    public int getNumberTherapist() {
        return numberTherapist;
    }
    
    public void setNumberTherapist(int numberTherapist) {
        this.numberTherapist = numberTherapist;
    }
    
    public String getDegree() {
        return degree;
    }
    
    public void setDegree(String degree) {
        this.degree = degree;
    }
    
    public String getWorkingHours() {
        return workingHours;
    }
    
    public void setWorkingHours(String workingHours) {
        this.workingHours = workingHours;
    }
    
    @Override
    public String Analysis() {
        return "Терапевт: " + "номер-" + getNumberTherapist() + " " + getFio() + " велел сдать анализ:" + " Кала.";
    }
}
 
 
public class TestProgramm {
    
    public static void main(String[] args) {
        PersonPolyclinic pt1 = new Patient(55, "Носов Николай Петрович", 34, "мужской", 486469, "ОРВИ");
        PersonPolyclinic pt2 = new Patient(44, "Кротов Михаил Николаевич", 25, "мужской", 645566, "Бронхит");
        PersonPolyclinic pt3 = new Patient(23, "Горбунов Вадим Юрьевич", 28, "мужской", 373865, "Аритмия");
        PersonPolyclinic pt4 = new Patient(56, "Цветкова Мария Викторовна", 33, "женский", 743820, "Астигматизм");
        
        PersonPolyclinic su1 = new Surgeon(365, "Машков Дмитрий Александрович", 43, "мужской", "60000 р.", "Высшая", "Офтальмолог", 74, "15 лет");
        PersonPolyclinic su2 = new Surgeon(153, "Болтунов Александр Михайлович", 47, "мужской", "70000 р.", "Высшая", "Кардиохирург", 90, "20 лет");
        PersonPolyclinic su3 = new Surgeon(047, "Рябинин Геннадий Романович", 36, "мужской", "80000 р.", "Вторая", "Нейрохирург", 34, "10 лет");
        
        PersonPolyclinic the1 = new Therapist(268, "Огурцов Михаил Дмитрович", 53, "мужской", "50000 р.", "Высшая", "25 лет", "Доктор наук", "с 9:00 до 13:00"); 
        PersonPolyclinic the2 = new Therapist(169, "Маркова Марина Алексеевна", 26, "женский", "30000 р.", "Вторая", "3 лет", "Кандидат наук", "с 12:00 до 15:00");
        PersonPolyclinic the3 = new Therapist(361, "Булыгина Екатерина Петровна", 35, "женский", "30000 р.", "Первая", "10 лет", "Кандидат наук", "с 8:00 до 12:00");
        
        System.out.println(su1.Analysis());
    }
 
}
Я переделал объявления переменных как вы сказали.
Теперь метод Analysis, который переопределяется в классах хирург и терапевт имеет полиморфизм?
Java
1
2
3
public String Analysis() {
        return "Доктор" + getFio() + " велел сдать анализ:" + "  ";
    }
И еще вопрос как тогда вызывать методы, которые чисто присуще например классу Пациент?(Это так вопрос для интереса)

Да и если можно подкинте идею метода с полиморфизмом по перегрузке. Фантазия подводит.
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
05.03.2019, 22:09
Теперь да ))) Молодец )

Добавлено через 1 минуту
И еще вопрос как тогда вызывать методы, которые чисто присуще например классу Пациент?
Никак....либо его объявить в классе PersonPolyclinic либо создать пациента от пациента, но тогда ты потеряешь полиморфизм...

Добавлено через 5 минут
зачем тебе номер терапевта и номер доктора? Смысл в каждом классе это писать???
пусть у всех номер будет общий и он будет в PersonPolyclinic

потому что иначе ты никак к ним не получишь доступ

учёная степень так же у всех поле общее

по поводу отработанное время так же подходит и для хирурга и для терапевта

можешь у терапевта сделать поле - кол-во принятых пациентов, а у хирурга - кол-во операций...
и сделать метод общий для всех info или переопределить toString, где вернёшь эту информацию
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.03.2019, 22:09

Отображение иерархии классов
Посоветуйте, пожалуйста прогу для отображения java-классов в виде диаграммы. (ничего не нагуглил, но у меня когда-то был диск с прогами для...

Простой пример иерархии классов, демонстрирующий полиморфный вызов метода
Приведите пример простой иерархии классов, демонстрирующий полиморфный вызов метода (работа с классом-наследником через ссылку на базовый...

Создание иерархии классов
Создать иерархию классов. воздушный шар--дирижабль--самолет Характеристики шара: скорость движения, направление движения (угол 0..359...

Создание иерархии классов
Создать следующую иерархию классов: Класс CL1 содержит в себе: -Элементы-данные доступные в CL2, но не доступные в CL3 -Класс...

Создание иерархии классов
Создать абстрактный базовый класс Struct, с виртуальными методами изменения и получения значения информационного поля, и класс потомок...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru