Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154

Задание по наследованию классов

18.05.2019, 14:08. Показов 1585. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую форумчане,

Вот мое задание, написано на английском, надеюсь не будет никаких проблем с пониманием. В посте будет закреп диаграммой наследования.

Finance and taxation in a middle age kingdom is going to be computerised. The different population groups are modeled by the following class hierarchy.

The attribute income is used for the respective inhabitant’s actual annual income in Taler. The methods taxableIncome() and tax() should provide the correct values for each of the kingdom’s inhabitants according to the following royal instructions:

As long as this law does not state something else, every inhabitant has to pay taxes for his whole annual income.
Every inhabitant has to pay 10% of his taxable income as taxes. The tax value is rounded down to an integer with 1 Taler being the absolute minimum.
The king does not pay any taxes at all.
Members of the nobility pay at least 20 Taler taxes.
12 Taler of a serf’s income are tax-free.
The tax calculation rules are expected to change annually. Because of that, royal instruction number 2 should be implemented at only one point of the class hierarchy. That way, adjusting the code to new rules is much easier.

Так же имеется заготовка для main, где очень много мне непонятного:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   public static void main(String[] args){
        taxableIncome(new King(), 20);//что это такое использование конструктора в конструкторе или что?
        taxableIncome(new Noble(), 20);
        taxableIncome(new Serf(), 20);
        taxableIncome(new Peasant(), 20);
    }
 
    static void taxableIncome(Inhabitant inhabitant, int income) {
        inhabitant.setIncome(income);
        System.out.println(inhabitant.getClass().getName() + что за использование get?? и почему там стоит класс и имя хотя этого в задании нет....
                ": Income " + inhabitant +
                ", taxable profit " +
                inhabitant.taxableIncome() +
                ", Tax " + inhabitant.tax());
        }
}

помогите с пониманием задания и что вообще надо делать... при чем значения income должны быть protected

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
public class Inhabitant {
 
    protected int income;
    protected long min_tax_value;
 
    public int setIncome(int income){
        this.income=income;
        return  income;
    }
 
    public void setMin_tax_value(long min_tax_value) {
        this.min_tax_value = min_tax_value;
    }
 
    public long tax(int income){
 
        min_tax_value = Math.round(this.income * 0.1);
 
        if (min_tax_value < 1) {
            return min_tax_value = 1;
    }
 
    public long taxableIncome(){
            return this.income-min_tax_value;
        }
    }
Начал все с суперкласса, но что конкретно надо делать в остальных я не понимаю, чтобы была возможность вызывать конструктор в main
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.05.2019, 14:08
Ответы с готовыми решениями:

Задача по наследованию классов
Ув. Форумчане, помогите, пожалуйста решить задачу про наследование классов. Я саму суть задачи не пойму. Плиз, помогите разобраться...

Задание на наследование классов
Делаю потиху задания из решебника и это на третьем пункте меня выбило немного из колеи. Создать объект класса Котёнок, используя...

Задание по наследованию классов
Создать иерархию классов : линия - прямоугольник - пирамида. Все классы должны содержать методы для фиксации и получения значений всех...

9
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
18.05.2019, 14:14
Цитата Сообщение от Федо Посмотреть сообщение
taxableIncome(new King(), 20);//что это такое использование конструктора в конструкторе или что?
нет, это вызов метода, который приведен ниже. он принимает на вход представителя ИНхабитант и целое число

Цитата Сообщение от Федо Посмотреть сообщение
System.out.println(inhabitant.getClass() .getName() + что за использование get?? и почему там стоит класс и имя хотя этого в задании нет...
а это вывод названия класса-наследника инхабитанта (их может быть много, Король и прочие крестьяне)
1
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
18.05.2019, 14:15
ты начни с какого-нибудь hello world, впереди паровоза бежать неполезно
0
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
18.05.2019, 14:23  [ТС]
Хелло ворлд я давно уже сделал, спасибо за совет

Добавлено через 5 минут
Welemir1
Тогда у меня еще вопрос,
я могу к примеру через метод в каждом конструкторе нового класса задавать доход?

к примеру:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Noble extends Inhabitant {
 
 
    Noble(int income){
            this.income=setIncome(20);
    }
 
        public long tax(int income) {
 
            min_tax_value = 20;
 
        }
        
 
            public long taxableIncome(){
                return this.income-min_tax_value;
            }
}

Но тут у меня так получилось,что я задаю значение дохода внутри класса, а нужно как задано в мейне, т.е вызываю метод в нем лежит конструктор и каким то образом получаю объект с определенным доходом. Я неправильно подошел к решению задачи?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
18.05.2019, 16:50
Федо, я тебя трудом понимаю
да, ты можешь свое значение передавать в конструктор, НО у тебя в мейне сделано по другому. Тебе пишут что у Инхибитанта должен быть метод сетИнком и конструктор по умолчанию.
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
18.05.2019, 19:17
Лучший ответ Сообщение было отмечено Федо как решение

Решение

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 Inhabitant {
    private int income;
 
    public static void main(String[] args) {
        taxableIncome(new King(), 20);
        taxableIncome(new Noble(), 20);
        taxableIncome(new Serf(), 20);
        taxableIncome(new Peasant(), 20);
    }
 
    static void taxableIncome(Inhabitant inhabitant, int income) {
        inhabitant.setIncome(income);
        System.out.println(inhabitant.getClass().getName() +
                ": Income " + inhabitant +
                ", taxable profit " +
                inhabitant.taxableIncome() +
                ", Tax " + inhabitant.tax());
    }
 
    public int getIncome() {
        return income;
    }
 
    public void setIncome(final int income) {
        this.income = income;
    }
 
    public int tax() {
        final int tax = (int) (taxableIncome() * 0.1);
        return Math.max(tax, 1);
    }
 
    public int taxableIncome() {
        return income;
    }
}
Java
1
2
3
4
5
6
public class Noble extends Inhabitant {
    @Override
    public int tax() {
        return Math.max(20, super.tax());
    }
}
Java
1
2
3
4
5
6
public class King extends Inhabitant {
    @Override
    public int tax() {
        return 0;
    }
}
Java
1
2
3
4
5
6
public class Serf extends Inhabitant {
    @Override
    public int taxableIncome() {
        return getIncome() - 12;
    }
}
Java
1
2
public class Peasant extends Inhabitant {
}
1
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
18.05.2019, 19:23  [ТС]
Arsegg
а обязательно использовать Inhabitant в качестве абстрактного класса?
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
18.05.2019, 19:25
Федо, нет, но это было бы логично.
0
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
18.05.2019, 19:41  [ТС]
Arsegg
Спасибо большое за помощь(за код), буду разбираться, я пока пытаюсь сам сделать без абстрактоного класса.
  • Не могу правда понять почему метод tax() не перезаписывается в классе King
  • Не могу понять почему в классе Serf у меня поле income подсвечивается красным и говорится,что я не могу получить значение из класса Inhabitant, хотя я написал метод getIncome?

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
public class Inhabitant {
 
    private int income;
    public long min_tax_value;
 
    public int getIncome(){
        return  income;
    }
 
 
    public int setIncome(int income){
        this.income=income;
        return  income;
    }
 
    public long tax(int income){
 
        if (this.min_tax_value > 1) {return min_tax_value = Math.round(this.income * 0.1);}
 
        else{return min_tax_value = 1;}
 
        }
 
    static void taxableIncome(Inhabitant inhabitant,
                              int income) {
        inhabitant.setIncome(income);
        System.out.println(inhabitant.getClass().getName() +
                ": Income " + inhabitant +
                ", taxable profit " +
                inhabitant.taxableIncome() +
                ", Tax " + inhabitant.tax());
    }
 
 
    public static void main(String[] args){
        taxableIncome(new King(), 20);
        taxableIncome(new Noble(), 20);
        taxableIncome(new Serf(), 20);
        taxableIncome(new Peasant(), 20);
    }
 
 
}
 
 
public class Noble extends Inhabitant {
 
 
    public long tax(int income) {
        return min_tax_value = 20;
    }
}
 
public class King extends Inhabitant {
 
        public long tax (Integer income){
        return min_tax_value = 0;
    }
}
 
public class Peasant extends Inhabitant {
 
}
public class Serf extends Peasant {
 
    @Override
    public int getIncome() {
        return super.getIncome();
    }
 
    public long tax(int income) {
 
        if (min_tax_value > 1) {
            return min_tax_value = Math.round(this.income * 0.1) - 12;
        }
        return  min_tax_value;
 
    }
}
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
18.05.2019, 23:25
Цитата Сообщение от Федо Посмотреть сообщение
public long tax(int income)
Цитата Сообщение от Федо Посмотреть сообщение
public long tax (Integer income)
Цитата Сообщение от xoraxax Посмотреть сообщение
ты начни с какого-нибудь hello world, впереди паровоза бежать неполезно
Правильно товарищ говорит, ознакомьтесь с теорией.
Цитата Сообщение от Федо Посмотреть сообщение
private int income
https://ru.wikibooks.org/wiki/... 1%82%D1%8C
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.05.2019, 23:25
Помогаю со студенческими работами здесь

Задачка по наследованию классов
Вот само задание:https://stepik.org/lesson/24462/step/7?unit=6768 Вот мой код: # Заполнение массива n = int(input()) d = {} ...

Задание на создание классов
Дорогие коллеги! Помогите новичку разобраться с этим заданием! Задание на создание классов Данное задание предполагает создать базовый...

Наследование классов. Недопонимаю задание
У меня есть класс, который может работать с полином. Есть задание: Класс для pаботы с многочленами. Создать наследников класса: ...

Простое задание с применением классов
Модифицировать и дополнить программу созданную при выполнении лабораторной работы №1: • предоставить спецификатор доступа private двум,...

Задание по иерархии классов в Visual Basic 6.0
Создать программу с абстрактным базовым классом и множественным наследованием, реализовать в нем: установку состояния объекта, просмотр...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru