Упражнения за извънаудиторна заетост

Задачите са подредени така, че първо да се упражни капсулация, след това модификатори за достъп, наследяване и ключовата дума super. В началните задачи са зададени конкретни имена на класове, полета и методи. В последните задачи част от структурата трябва да бъде избрана самостоятелно.

Задача 1

Да се дефинира клас BankAccount, който използва капсулация.

Класът трябва да съдържа следните частни полета:

  • ownerName от тип String;
  • balance от тип double.

Да се дефинира параметризиран конструктор:

BankAccount(String ownerName, double balance)

Конструкторът трябва да задава стойността на ownerName. Стойността на balance трябва да се задава само ако е по-голяма или равна на 0.

Да се дефинират следните методи:

  • getOwnerName();
  • getBalance();
  • deposit(double amount);
  • withdraw(double amount).

Методът deposit(double amount) трябва да увеличава баланса само ако amount е положително число. Методът withdraw(double amount) трябва да намалява баланса само ако amount е положително число и има достатъчна наличност.

Да се създаде клас Application с метод main, в който се създава обект от BankAccount и се демонстрира работата на всички методи.

Задача 2

Да се дефинира клас Student, който използва различни модификатори за достъп.

Класът трябва да съдържа:

  • private String name;
  • private int facultyNumber;
  • protected String specialty;
  • public static String university.

Да се дефинира конструктор:

Student(String name, int facultyNumber, String specialty)

Да се дефинират методи за четене на всички нестатични полета. Да не се дефинират методи за директна промяна на facultyNumber.

Да се създаде клас Application, в който се създават два обекта от Student. Да се покаже достъпът до публичното статично поле чрез името на класа.

Пример:

Student.university = "Technical University of Varna";

Да се направи опит за директен достъп до частно поле от Application и този ред да се остави като коментар, защото не се компилира.

Задача 3

Да се дефинира родителски клас Person и клас наследник Student.

Класът Person трябва да съдържа:

  • private String name;
  • private int age;
  • конструктор Person(String name, int age);
  • метод getName();
  • метод getAge();
  • метод getInformation(), който връща текст с името и възрастта.

Класът Student трябва да наследява Person и да съдържа:

  • private int facultyNumber;
  • конструктор Student(String name, int age, int facultyNumber);
  • метод getFacultyNumber();
  • метод getStudentInformation().

В конструктора на Student трябва да се използва super(name, age). В метода getStudentInformation() трябва да се използва super.getInformation() и към резултата да се добави факултетният номер.

Да се създадат обекти от Person и Student. За обекта от Person да се извика getInformation(), а за обекта от Student да се извика getStudentInformation().

Задача 4

Да се дефинира йерархия от класове за животни.

Родителският клас Animal трябва да съдържа:

  • private String name;
  • private int age;
  • protected double weight;
  • конструктор Animal(String name, int age, double weight);
  • методи за четене на полетата;
  • метод getDescription().

Класът Dog трябва да наследява Animal и да добавя:

  • private String breed;
  • private int learnedCommands;
  • конструктор Dog(String name, int age, double weight, String breed, int learnedCommands);
  • метод getDogDescription(), който използва super.getDescription().

Класът Cat трябва да наследява Animal и да добавя:

  • private String furColor;
  • private boolean indoor;
  • конструктор Cat(String name, int age, double weight, String furColor, boolean indoor);
  • метод getCatDescription(), който използва super.getDescription().

Да се създадат поне два обекта от Dog и два обекта от Cat. Да се отпечатат описанията им.

Задача 5

Да се разшири йерархията от задача 4.

В класа Animal да се добави метод:

double calculateBaseDailyFood()

Методът трябва да връща примерна дневна дажба храна според теглото на животното. Формулата трябва да бъде избрана самостоятелно и да бъде описана с кратък коментар в кода.

В класа Dog да се добави метод calculateDogDailyFood(). Методът трябва да използва super.calculateBaseDailyFood() и към резултата да приложи корекция според специфичните характеристики на куче.

В класа Cat да се добави метод calculateCatDailyFood(). Методът трябва да използва super.calculateBaseDailyFood() и към резултата да приложи корекция според специфичните характеристики на котка.

Да се създадат отделни обекти от Dog и Cat. Да се извикат съответните методи за изчисляване на дневна храна и да се изчисли общото количество храна за един ден.

Задача 6

Да се дефинира собствена йерархия от класове по избор. Темата може да бъде учебна система, магазин, транспорт, библиотека или друга реална област.

Йерархията трябва да съдържа:

  • един родителски клас;
  • поне два класа наследници;
  • частни полета в родителския клас;
  • частни полета в класовете наследници;
  • поне едно protected поле или protected метод;
  • конструктори, които използват super(...);
  • поне един метод в клас наследник, който използва super.methodName().

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


This site uses Just the Docs, a documentation theme for Jekyll.