В ходе выполнения Лабораторной работы №2 мы научились: писать ссылки на переменные, создавать экземпляры класса и пр.
ЛАБОРАТОРНАЯ РАБОТА №3. НАСЛЕДОВАНИЕ В JAVA
Цель лабораторной работы
Цель данной лабораторной работы - изучить понятие наследования, и научиться реализовывать наследование в Java.
Теоретические сведения
Одним из ключевых аспектов объектно-ориентированного программирования является наследование. С помощью наследования можно расширить функционал уже имеющихся классов за счет добавления нового функционала или изменения старого.
Задание
Создать абстрактный класс, описывающий посуду(Dish). С помощью наследования реализовать различные виды посуды, имеющие свои свойства и методы. Протестировать работу классов.
Ход выполнения
Для начала, создадим класс с названием Dish, который будет являться родительским и от которого мы будем наследоваться в дальнейшем. Кодпредставленниже:
Dish.java
public class Dish {
protected String material;
protected String color;
public String getMaterial() {
return material;
}
public void setMaterial(String material) {
this.material = material;
}
public String getColor() {
return color;
}
public void setColor(String color) {
color = color;
}
public Dish(String material, String color) {
this.material = material;
this.color = color;
}
@Override
public String toString() {
return "Посуда{" +
"Материал " + material + '\'' +
", Цвет" + color + '\'' +
'}';
}
}
Теперь давайте разберем его подробнее:
publicclassDish { // создаем класс Dish с уровнем доступа public
protected String material; // создаемпеременную «material» типа String с уровнем доступа protected.
protectedStringcolor; // создаемпеременную «color» типаStringсуровнемдоступаprotected.
Далее идут так называемые «сеттеры» и «геттеры» для объявленных переменных. Геттеры и сеттеры — это методы, позволяющие изменять/получать значение полей класса из других объектов. Т.е. что бы напрямую не обращаться к полю, (не делая его public) используются геттеры и сеттеры и тем самым соблюдая принцип инкапсуляции, один из основополагающих принципов ООП.
Создать геттеры и сеттеры можно автоматически, для этого нужно нажать сочетание клавиш Alt+Insert и в появившемся окне выбираем GetterandSetter
Рис. 15
В следующем окне выделяем наши переменные «material» и «color» и нажимаем ОК. И всё, наши геттеры и сеттеры созданы.
Рис. 16
Код:
public String getMaterial() { //Геттер для переменной «material»
return material;
}
public void setMaterial(String material) { //Cеттер для переменной «material»
this.material = material;
}
public String getColor() { //Геттер для переменной «color»
return color;
}
public void setColor(String color) { //Cеттер для переменной «color»
color = color;
}
Далее идет конструктор. Конструктор — это метод класса, который инициализирует новый объект после его создания. Он точно так же, как и геттеры и сеттеры может быть создан автоматически, только для этого после нажатия Alt+Insert в появившемся меню следует выбрать «Constructor». Далее шаги аналогичны созданию геттеров и сеттеров.
publicDish(Stringmaterial, Stringcolor) {
this.material = material;
this.color = color;
}
Далее идет метод toString. Этот метод служит для представления объекта в виде строки. Так же может быть создан автоматически при помощи Alt+Insert
@Override
public String toString() {
return "Посуда{" +
"Материал " + material + '\'' +
", Цвет" + color + '\'' +
'}';
}
}
Теперь давайте создадим ещё один класс с названием Tarelka, который будет являться дочерним для класса Dish и будет от него наследоваться
Tarelka.java
public class Tarelka extends Dish {
private String razmer;
public String getRazmer() {
return razmer;
}
public void setRazmer(String razmer) {
this.razmer = razmer;
}
public Tarelka(String material, String color, String razmer) {
super(material, color);
this.razmer = razmer;
}
@Override
public String toString() {
return "Tарелка{" +
"Размер: " + razmer +
", Материал: " + material +
", Цвет: " + color +
'}';
}
}
Рассмотримегоподробнее
publicclassTarelkaextendsDish { // создаемновыйкласс «Tarelka» суровнемдоступаpublic. «extendsDish» означает, что данный класс наследуется от класса Dish (созданного нами ранее) и расширяет, дополняет его. Т.е. он будет наследовать все методы и переменные, содержащиеся в классе Dish плюс к этому содержать свои методы и переменные (в нашем случае это переменная «razmer», объявленная строкой ниже)
privateStringrazmer; // создаем переменную «razmer» класса String с уровнем доступа private.
Далее идут «сеттеры» и «геттеры» для переменной «razmer»
public String getRazmer() { // геттер
returnrazmer;
}
public void setRazmer(String razmer) { // сеттер
this.razmer = razmer;
}
Послеидетконструктор
public void setRazmer(String razmer) {
this.razmer = razmer;
}
ИзавершаетвсёметодtoString
@Override
public String toString() {
return "Tарелка{" +
"Размер: " + razmer +
", Материал: " + material +
", Цвет: " + color +
'}';
}
}
И последний класс, это класс TesterDish.
TesterDish.java
publicclassTesterDish { //создаем класс TesterDish с уровнем доступа public
publicstaticvoidmain(String[] args) {
Tarelkat = newTarelka("Керамическая","Белый","Большая"); //создаем экземпляр «t» класса Tarelka с параметрами: керамическая (переменная «material»), белый (переменная «color», большая (переменная «razmer»
System. out. println(t); //выводим объект t на экран
}
}
Рис. 17.