diff --git a/students/23K0120/23K0120-p02/src/main/java/ru/mirea/practice/s23k0120/Main.java b/students/23K0120/23K0120-p02/src/main/java/ru/mirea/practice/s23k0120/Main.java
index fc55fc3a6..34be8fc10 100644
--- a/students/23K0120/23K0120-p02/src/main/java/ru/mirea/practice/s23k0120/Main.java
+++ b/students/23K0120/23K0120-p02/src/main/java/ru/mirea/practice/s23k0120/Main.java
@@ -7,6 +7,6 @@ private Main() {
}
public static void main(String[] args) {
- System.out.println("Первая практическая работа!");
+ System.out.println("Вторая практическая работа!");
}
}
diff --git a/students/23K0120/23K0120-p04/pom.xml b/students/23K0120/23K0120-p04/pom.xml
new file mode 100644
index 000000000..7fcab1a98
--- /dev/null
+++ b/students/23K0120/23K0120-p04/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K0120
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K0120-p04
+ Enum
+
diff --git a/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/Main.java b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/Main.java
new file mode 100644
index 000000000..a438361b5
--- /dev/null
+++ b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/Main.java
@@ -0,0 +1,12 @@
+package ru.mirea.practice.s23k0120;
+
+public final class Main {
+
+ private Main() {
+
+ }
+
+ public static void main(String[] args) {
+ System.out.println("Четвёртая практическая работа!");
+ }
+}
diff --git a/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/Atelier.java b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/Atelier.java
new file mode 100644
index 000000000..7a9466f58
--- /dev/null
+++ b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/Atelier.java
@@ -0,0 +1,34 @@
+package ru.mirea.practice.s23k0120.atelier;
+
+public abstract class Atelier {
+
+ public static void dressMan(Clothes[] clothes) {
+ for (Clothes clothe : clothes) {
+ if (clothe instanceof MenClothing) {
+ ((MenClothing) clothe).dressMan();
+ System.out.print('\n');
+ }
+ }
+ }
+
+ public static void dressWoman(Clothes[] clothes) {
+ for (Clothes clothe : clothes) {
+ if (clothe instanceof WomenClothing) {
+ ((WomenClothing) clothe).dressWoman();
+ System.out.print('\n');
+ }
+ }
+ }
+
+ public static void main(String[] args) {
+ Clothes[] clothes = new Clothes[4];
+
+ clothes[0] = new TShirt(ClothingSizes.XXS, 1000, "Красный");
+ clothes[1] = new Pants(ClothingSizes.M, 5000, "Синий");
+ clothes[2] = new Skirt(ClothingSizes.L, 10000, "Чёрный");
+ clothes[3] = new Tie(ClothingSizes.S, 2000, "Зелёный");
+
+ dressMan(clothes);
+ dressWoman(clothes);
+ }
+}
diff --git a/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/Clothes.java b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/Clothes.java
new file mode 100644
index 000000000..18d9db361
--- /dev/null
+++ b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/Clothes.java
@@ -0,0 +1,22 @@
+package ru.mirea.practice.s23k0120.atelier;
+
+
+import java.text.NumberFormat;
+import java.util.Locale;
+
+public abstract class Clothes {
+ ClothingSizes size;
+ float cost;
+ String color;
+
+ public Clothes(ClothingSizes size, float cost, String color) {
+ this.size = size;
+ this.cost = cost;
+ this.color = color;
+ }
+
+ public String getDescription() {
+ NumberFormat format = NumberFormat.getCurrencyInstance(new Locale("ru", "Ru"));
+ return String.format("%s, Цена: %s, Цвет: %s", size, format.format(cost), color);
+ }
+}
\ No newline at end of file
diff --git a/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/ClothingSizes.java b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/ClothingSizes.java
new file mode 100644
index 000000000..57f0a8d39
--- /dev/null
+++ b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/ClothingSizes.java
@@ -0,0 +1,24 @@
+package ru.mirea.practice.s23k0120.atelier;
+
+public enum ClothingSizes {
+ XXS(32), XS(34), S(36), M(38), L(40);
+
+ final int euroSize;
+
+ ClothingSizes(int euroSize) {
+ this.euroSize = euroSize;
+ }
+
+ public String getDescription() {
+ if (euroSize >= 34) {
+ return "Взрослый размер";
+ } else {
+ return "Детский размер";
+ }
+ }
+
+ @Override
+ public String toString() {
+ return String.format("%s, %d", getDescription(), this.euroSize);
+ }
+}
diff --git a/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/MenClothing.java b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/MenClothing.java
new file mode 100644
index 000000000..3108f5732
--- /dev/null
+++ b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/MenClothing.java
@@ -0,0 +1,5 @@
+package ru.mirea.practice.s23k0120.atelier;
+
+public interface MenClothing {
+ void dressMan();
+}
diff --git a/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/Pants.java b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/Pants.java
new file mode 100644
index 000000000..411ca902b
--- /dev/null
+++ b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/Pants.java
@@ -0,0 +1,17 @@
+package ru.mirea.practice.s23k0120.atelier;
+
+public class Pants extends Clothes implements MenClothing, WomenClothing {
+ public Pants(ClothingSizes size, float cost, String color) {
+ super(size, cost, color);
+ }
+
+ @Override
+ public void dressMan() {
+ System.out.printf("Мужские Брюки %s", getDescription());
+ }
+
+ @Override
+ public void dressWoman() {
+ System.out.printf("Женские Брюки %s", getDescription());
+ }
+}
diff --git a/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/Skirt.java b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/Skirt.java
new file mode 100644
index 000000000..b62a63f3b
--- /dev/null
+++ b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/Skirt.java
@@ -0,0 +1,12 @@
+package ru.mirea.practice.s23k0120.atelier;
+
+public class Skirt extends Clothes implements WomenClothing {
+ public Skirt(ClothingSizes size, float cost, String color) {
+ super(size, cost, color);
+ }
+
+ @Override
+ public void dressWoman() {
+ System.out.printf("Юбка %s", getDescription());
+ }
+}
\ No newline at end of file
diff --git a/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/TShirt.java b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/TShirt.java
new file mode 100644
index 000000000..52304c691
--- /dev/null
+++ b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/TShirt.java
@@ -0,0 +1,18 @@
+package ru.mirea.practice.s23k0120.atelier;
+
+public class TShirt extends Clothes implements MenClothing, WomenClothing {
+ public TShirt(ClothingSizes size, float cost, String color) {
+ super(size, cost, color);
+ }
+
+ @Override
+ public void dressMan() {
+ System.out.printf("Мужская Футболка %s", getDescription());
+ }
+
+ @Override
+ public void dressWoman() {
+ System.out.printf("Женская Футболка %s", getDescription());
+ }
+}
+
diff --git a/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/Tie.java b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/Tie.java
new file mode 100644
index 000000000..a550867d0
--- /dev/null
+++ b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/Tie.java
@@ -0,0 +1,12 @@
+package ru.mirea.practice.s23k0120.atelier;
+
+public class Tie extends Clothes implements MenClothing {
+ public Tie(ClothingSizes size, float cost, String color) {
+ super(size, cost, color);
+ }
+
+ @Override
+ public void dressMan() {
+ System.out.printf("Галстук %s", getDescription());
+ }
+}
diff --git a/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/WomenClothing.java b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/WomenClothing.java
new file mode 100644
index 000000000..dfebba9d6
--- /dev/null
+++ b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/atelier/WomenClothing.java
@@ -0,0 +1,5 @@
+package ru.mirea.practice.s23k0120.atelier;
+
+public interface WomenClothing {
+ void dressWoman();
+}
diff --git a/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/seasons/Main.java b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/seasons/Main.java
new file mode 100644
index 000000000..4ca2b96a1
--- /dev/null
+++ b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/seasons/Main.java
@@ -0,0 +1,12 @@
+package ru.mirea.practice.s23k0120.seasons;
+
+public abstract class Main {
+ public static void main(String[] args) {
+ Seasons season = Seasons.SPRING;
+ System.out.printf("%s, Длится с 1 марта по 31 мая, Второе время года в году\n", season);
+
+ for (Seasons s : Seasons.values()) {
+ System.out.printf("%s, %s\n", s, s.getDescription());
+ }
+ }
+}
diff --git a/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/seasons/Seasons.java b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/seasons/Seasons.java
new file mode 100644
index 000000000..bc013bdfc
--- /dev/null
+++ b/students/23K0120/23K0120-p04/src/main/java/ru/mirea/practice/s23k0120/seasons/Seasons.java
@@ -0,0 +1,85 @@
+package ru.mirea.practice.s23k0120.seasons;
+
+public enum Seasons {
+ SUMMER(25f),
+ AUTUMN(5f),
+ WINTER(-10f),
+ SPRING(15f);
+
+ private final float temperature;
+
+ Seasons(float temperature) {
+ this.temperature = temperature;
+ }
+
+ public float getTemperature() {
+ return temperature;
+ }
+
+ public static void like(Seasons season) {
+ String seasonStr;
+ switch (season) {
+ case SUMMER:
+ seasonStr = "лето";
+ break;
+ case SPRING:
+ seasonStr = "весну";
+ break;
+ case AUTUMN:
+ seasonStr = "осень";
+ break;
+ case WINTER:
+ seasonStr = "зиму";
+ break;
+ default:
+ seasonStr = "-";
+ break;
+ }
+ System.out.printf("Я люблю %s\n", seasonStr);
+ }
+
+ public String getDescription() {
+ String season;
+ switch (this) {
+ case SUMMER:
+ season = "Тёплое";
+ break;
+ case SPRING:
+ season = "Умеренное";
+ break;
+ case AUTUMN:
+ season = "Прохладное";
+ break;
+ case WINTER:
+ season = "Холодное";
+ break;
+ default:
+ season = "-";
+ break;
+ }
+ return String.format("%s время года", season);
+ }
+
+ @Override
+ public String toString() {
+ String season;
+ switch (this) {
+ case SUMMER:
+ season = "Лето";
+ break;
+ case SPRING:
+ season = "Весна";
+ break;
+ case AUTUMN:
+ season = "Осень";
+ break;
+ case WINTER:
+ season = "Зима";
+ break;
+ default:
+ season = "-";
+ break;
+ }
+ return String.format("Время года - %s, Средняя температура - %.2f°C", season, this.temperature);
+ }
+}
\ No newline at end of file
diff --git a/students/23K0120/23K0120-p04_1/pom.xml b/students/23K0120/23K0120-p04_1/pom.xml
new file mode 100644
index 000000000..d172644c6
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K0120
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K0120-p04_1
+ Наследование и Абстракция
+
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/Main.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/Main.java
new file mode 100644
index 000000000..23bfad03a
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/Main.java
@@ -0,0 +1,12 @@
+package ru.mirea.practice.s23k0120;
+
+public final class Main {
+
+ private Main() {
+
+ }
+
+ public static void main(String[] args) {
+ System.out.println("Четвёртая практическая работа! - часть 2");
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/exercise1/Circle.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/exercise1/Circle.java
new file mode 100644
index 000000000..ec50bc96f
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/exercise1/Circle.java
@@ -0,0 +1,41 @@
+package ru.mirea.practice.s23k0120.exercise1;
+
+public class Circle extends Shape {
+ double radius;
+
+ public Circle() {
+ // Default constructor
+ }
+
+ public Circle(double radius) {
+ this.radius = radius;
+ }
+
+ public Circle(double radius, String color, boolean filled) {
+ super(color, filled);
+ this.radius = radius;
+ }
+
+ public double getRadius() {
+ return radius;
+ }
+
+ public void setRadius(float radius) {
+ this.radius = radius;
+ }
+
+ @Override
+ public double getPerimeter() {
+ return radius * Math.PI * 2;
+ }
+
+ @Override
+ public double getArea() {
+ return radius * radius * Math.PI;
+ }
+
+ @Override
+ public String toString() {
+ return "Circle{" + "radius=" + radius + ", color='" + color + '\'' + ", filled=" + filled + '}';
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/exercise1/Main.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/exercise1/Main.java
new file mode 100644
index 000000000..79bdfe1aa
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/exercise1/Main.java
@@ -0,0 +1,57 @@
+package ru.mirea.practice.s23k0120.exercise1;
+
+public abstract class Main {
+ public static void main(String[] args) {
+ Circle s1 = new Circle(5.5, "RED", false); // Upcast Circle to Shape
+ System.out.println(s1); //Child class version
+ System.out.println(s1.getArea()); // Child class version
+ System.out.println(s1.getPerimeter()); // Child class version
+ System.out.println(s1.getColor()); // Child class version
+ System.out.println(s1.isFilled()); // Child class version
+ //System.out.println(s1.getRadius()); // Cannot resolve method "getRadius" in "Shape"
+ // (Trying to access Parent class version, but it doesn't exist)
+ // Can't access child version of a method when the object is upcasted, but the method isn't defined in the parent class
+
+ Circle c1 = s1; // Downcast back to Circle
+ System.out.println(c1); // Child class version
+ System.out.println(c1.getArea()); // Child class version
+ System.out.println(c1.getPerimeter()); // Child class version
+ System.out.println(c1.getColor()); // Child class version
+ System.out.println(c1.isFilled()); // Child class version
+ System.out.println(c1.getRadius()); // Child class version
+ Shape s2 = new Shape();
+ System.out.println(s2);
+ Rectangle s3 = new Rectangle(1.0, 2.0, "RED", false); // Upcast
+ System.out.println(s3); // Child class version
+ System.out.println(s3.getArea()); // Child class version
+ System.out.println(s3.getPerimeter()); // Child class version
+ System.out.println(s3.getColor()); // Child class version
+ System.out.println(s3.getLength()); // Cannot resolve method "getLength" in "Shape" (Trying to access Parent class version)
+ System.out.println("Rectangle r1 = (Rectangle)s3;");
+ System.out.println(s3);
+ System.out.println(s3.getArea());
+ System.out.println(s3.getColor());
+ System.out.println(s3.getLength());
+ Square s4 = new Square(6.6);//Upcast
+ System.out.println(s4);
+ System.out.println(s4.getArea());
+ System.out.println(s4.getColor());
+ //System.out.println(s4.getSide()); // Cannot resolve method "getSide" in "Shape" (Trying to access Parent class version)
+ /*обратите внимание, что выполняем downcast Shape s4 к
+ Rectangle, который является суперклассом
+ Square(родителем), вместо Square */
+ Square r2 = s4;
+ System.out.println(r2);
+ System.out.println(r2.getArea());
+ System.out.println(r2.getColor());
+ //System.out.println(r2.getSide()); // Cannot resolve method "getSide" in "Shape" (Trying to access Parent class version)
+ System.out.println(r2.getLength());
+ // Downcast Rectangle r2 к Square
+ Square sq1 = r2;
+ System.out.println(sq1);
+ System.out.println(sq1.getArea());
+ System.out.println(sq1.getColor());
+ System.out.println(sq1.getSide()); // Cannot resolve method "getSide" in "Shape" (Trying to access Parent class version)
+ System.out.println(sq1.getLength());
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/exercise1/Rectangle.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/exercise1/Rectangle.java
new file mode 100644
index 000000000..0c632e574
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/exercise1/Rectangle.java
@@ -0,0 +1,52 @@
+package ru.mirea.practice.s23k0120.exercise1;
+
+public class Rectangle extends Shape {
+ protected double width = 0;
+ protected double length = 0;
+
+ public Rectangle() {
+ // Default constructor
+ }
+
+ public Rectangle(double width, double length) {
+ this.width = width;
+ this.length = length;
+ }
+
+ public Rectangle(double width, double length, String color, boolean filled) {
+ super(color, filled);
+ this.width = width;
+ this.length = length;
+ }
+
+ public double getWidth() {
+ return width;
+ }
+
+ public void setWidth(double width) {
+ this.width = width;
+ }
+
+ public double getLength() {
+ return length;
+ }
+
+ public void setLength(double length) {
+ this.length = length;
+ }
+
+ @Override
+ public double getPerimeter() {
+ return width * 2 + length * 2;
+ }
+
+ @Override
+ public double getArea() {
+ return width * length;
+ }
+
+ @Override
+ public String toString() {
+ return "Rectangle{" + "width=" + width + ", length=" + length + ", filled=" + filled + ", color='" + color + '\'' + '}';
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/exercise1/Shape.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/exercise1/Shape.java
new file mode 100644
index 000000000..5fe413ba4
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/exercise1/Shape.java
@@ -0,0 +1,45 @@
+package ru.mirea.practice.s23k0120.exercise1;
+
+public class Shape {
+ protected String color;
+ protected boolean filled;
+
+ public Shape() {
+ // Default constructor
+ }
+
+ public Shape(String color, boolean filled) {
+ this.color = color;
+ this.filled = filled;
+ }
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+
+ public boolean isFilled() {
+ return filled;
+ }
+
+ public void setFilled(boolean filled) {
+ this.filled = filled;
+ }
+
+
+ public double getArea() {
+ return 0;
+ }
+
+ public double getPerimeter() {
+ return 0;
+ }
+
+ @Override
+ public String toString() {
+ return "Shape{" + "color='" + color + '\'' + ", filled=" + filled + '}';
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/exercise1/Square.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/exercise1/Square.java
new file mode 100644
index 000000000..ee2b7700c
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/exercise1/Square.java
@@ -0,0 +1,30 @@
+package ru.mirea.practice.s23k0120.exercise1;
+
+public class Square extends Rectangle {
+
+ public Square() {
+ // Default constructor
+ }
+
+ public Square(double side) {
+ super(side, side);
+ }
+
+ public Square(double side, String color, boolean filled) {
+ super(side, side, color, filled);
+ }
+
+ public void setSide(double side) {
+ this.width = side;
+ this.length = side;
+ }
+
+ public double getSide() {
+ return this.width;
+ }
+
+ @Override
+ public String toString() {
+ return "Square{" + "side=" + width + ", filled=" + filled + ", color='" + color + '\'' + '}';
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task1/Circle.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task1/Circle.java
new file mode 100644
index 000000000..1caaaf24d
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task1/Circle.java
@@ -0,0 +1,29 @@
+package ru.mirea.practice.s23k0120.task1;
+
+public class Circle extends Shape {
+ float radius;
+
+ public Circle(float radius) {
+ this.radius = radius;
+ }
+
+ @Override
+ public String getType() {
+ return "Circle";
+ }
+
+ @Override
+ public float getPerimeter() {
+ return (float) (radius * Math.PI * 2);
+ }
+
+ @Override
+ public float getArea() {
+ return (float) (radius * radius * Math.PI);
+ }
+
+ @Override
+ public String toString() {
+ return "Circle{" + "radius=" + radius + '}';
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task1/Rectangle.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task1/Rectangle.java
new file mode 100644
index 000000000..c94578879
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task1/Rectangle.java
@@ -0,0 +1,31 @@
+package ru.mirea.practice.s23k0120.task1;
+
+public class Rectangle extends Shape {
+ float width;
+ float height;
+
+ public Rectangle(float width, float height) {
+ this.width = width;
+ this.height = height;
+ }
+
+ @Override
+ public String getType() {
+ return "Rectangle";
+ }
+
+ @Override
+ public float getPerimeter() {
+ return width * 2 + height * 2;
+ }
+
+ @Override
+ public float getArea() {
+ return width * height;
+ }
+
+ @Override
+ public String toString() {
+ return "Rectangle{" + "width=" + width + ", length=" + height + '}';
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task1/Shape.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task1/Shape.java
new file mode 100644
index 000000000..53b93028c
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task1/Shape.java
@@ -0,0 +1,21 @@
+package ru.mirea.practice.s23k0120.task1;
+
+public class Shape {
+
+ public String getType() {
+ return "Shape";
+ }
+
+ public float getArea() {
+ return 0;
+ }
+
+ public float getPerimeter() {
+ return 0;
+ }
+
+ @Override
+ public String toString() {
+ return "Shape";
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task1/Square.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task1/Square.java
new file mode 100644
index 000000000..6d3a7a02f
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task1/Square.java
@@ -0,0 +1,18 @@
+package ru.mirea.practice.s23k0120.task1;
+
+public class Square extends Rectangle {
+
+ public Square(float side) {
+ super(side, side);
+ }
+
+ @Override
+ public String getType() {
+ return "Square";
+ }
+
+ @Override
+ public String toString() {
+ return "Square{" + "side=" + width + "}";
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task1/Tester.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task1/Tester.java
new file mode 100644
index 000000000..2b71e27b5
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task1/Tester.java
@@ -0,0 +1,15 @@
+package ru.mirea.practice.s23k0120.task1;
+
+public abstract class Tester {
+ public static void main(String[] args) {
+ Circle circle = new Circle(5);
+ Rectangle rect = new Rectangle(10, 15);
+ Square square = new Square(20);
+
+ Shape[] shapes = {circle, rect, square};
+
+ for (Shape shape : shapes) {
+ System.out.printf("%s, %s Perimeter: %f Area: %f\n", shape.getType(), shape, shape.getPerimeter(), shape.getArea());
+ }
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Car.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Car.java
new file mode 100644
index 000000000..073d135b1
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Car.java
@@ -0,0 +1,32 @@
+package ru.mirea.practice.s23k0120.task10;
+
+public class Car extends Vehicle {
+
+ public Car() {
+ // Default constructor
+ }
+
+ public Car(double speed, double cost, int passengerSeats) {
+ super(speed, cost, passengerSeats);
+ }
+
+ public Car(double speed, double cost, double cargoCapacity) {
+ super(speed, cost, cargoCapacity);
+ }
+
+ public Car(double speed, double cost, int passengerSeats, double cargoCapacity) {
+ super(speed, cost, passengerSeats, cargoCapacity);
+ }
+
+ @Override
+ public void transportPassengers(int numOfPassengers, double distance) {
+ super.transportPassengers(numOfPassengers, distance);
+ System.out.print(" via car");
+ }
+
+ @Override
+ public void transportCargo(double weight, double distance) {
+ super.transportCargo(weight, distance);
+ System.out.print(" via car");
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Main.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Main.java
new file mode 100644
index 000000000..6dfd73a22
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Main.java
@@ -0,0 +1,19 @@
+package ru.mirea.practice.s23k0120.task10;
+
+public abstract class Main {
+ public static void main(String[] args) {
+ Car car = new Car(110f, 200f, 4, 300);
+ Plane plane = new Plane(950f, 5000f, 20, 5000);
+ Train train = new Train(250f, 150f, 500, 5000000);
+ Ship ship = new Ship(1.852 * 15, 150f, 20, 120000000);
+
+ Vehicle[] vehicles = new Vehicle[]{car, plane, train, ship};
+
+ for (Vehicle vehicle : vehicles) {
+ vehicle.transportPassengers(500, 1000);
+ System.out.println();
+ vehicle.transportCargo(1000 * 1000, 1000);
+ System.out.println();
+ }
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Plane.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Plane.java
new file mode 100644
index 000000000..d0d411f89
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Plane.java
@@ -0,0 +1,33 @@
+package ru.mirea.practice.s23k0120.task10;
+
+public class Plane extends Vehicle {
+
+ public Plane() {
+ // Default constructor
+ }
+
+ public Plane(double speed, double cost, int passengerSeats) {
+ super(speed, cost, passengerSeats);
+ }
+
+ public Plane(double speed, double cost, double cargoCapacity) {
+ super(speed, cost, cargoCapacity);
+ }
+
+ public Plane(double speed, double cost, int passengerSeats, double cargoCapacity) {
+ super(speed, cost, passengerSeats, cargoCapacity);
+ }
+
+ @Override
+ public void transportPassengers(int numOfPassengers, double distance) {
+ super.transportPassengers(numOfPassengers, distance);
+ System.out.print(" via plane");
+ }
+
+ @Override
+ public void transportCargo(double weight, double distance) {
+ super.transportCargo(weight, distance);
+ System.out.print(" via plane");
+ }
+
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Ship.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Ship.java
new file mode 100644
index 000000000..bae2be60d
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Ship.java
@@ -0,0 +1,32 @@
+package ru.mirea.practice.s23k0120.task10;
+
+public class Ship extends Vehicle {
+
+ public Ship() {
+ // Default constructor
+ }
+
+ public Ship(double speed, double cost, int passengerSeats) {
+ super(speed, cost, passengerSeats);
+ }
+
+ public Ship(double speed, double cost, double cargoCapacity) {
+ super(speed, cost, cargoCapacity);
+ }
+
+ public Ship(double speed, double cost, int passengerSeats, double cargoCapacity) {
+ super(speed, cost, passengerSeats, cargoCapacity);
+ }
+
+ @Override
+ public void transportPassengers(int numOfPassengers, double distance) {
+ super.transportPassengers(numOfPassengers, distance);
+ System.out.print(" via plane");
+ }
+
+ @Override
+ public void transportCargo(double weight, double distance) {
+ super.transportCargo(weight, distance);
+ System.out.print(" via plane");
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Train.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Train.java
new file mode 100644
index 000000000..9c2aed678
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Train.java
@@ -0,0 +1,32 @@
+package ru.mirea.practice.s23k0120.task10;
+
+public class Train extends Vehicle {
+
+ public Train() {
+ // Default constructor
+ }
+
+ public Train(double speed, double cost, int passengerSeats) {
+ super(speed, cost, passengerSeats);
+ }
+
+ public Train(double speed, double cost, double cargoCapacity) {
+ super(speed, cost, cargoCapacity);
+ }
+
+ public Train(double speed, double cost, int passengerSeats, double cargoCapacity) {
+ super(speed, cost, passengerSeats, cargoCapacity);
+ }
+
+ @Override
+ public void transportPassengers(int numOfPassengers, double distance) {
+ super.transportPassengers(numOfPassengers, distance);
+ System.out.print(" via train");
+ }
+
+ @Override
+ public void transportCargo(double weight, double distance) {
+ super.transportCargo(weight, distance);
+ System.out.print(" via train");
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Vehicle.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Vehicle.java
new file mode 100644
index 000000000..8d989a713
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task10/Vehicle.java
@@ -0,0 +1,59 @@
+package ru.mirea.practice.s23k0120.task10;
+
+public class Vehicle {
+ protected double speed; // Km/h
+ protected int passengerSeats; //Num of seats
+ protected double cost; // $/(1000 km * 100 kg)
+ protected double cargoCapacity; // kg
+
+ public Vehicle() {
+ // Default constructor
+ }
+
+ public Vehicle(double speed, double cost, int passengerSeats) {
+ this.speed = speed;
+ this.cost = cost;
+ this.passengerSeats = passengerSeats;
+ }
+
+ public Vehicle(double speed, double cost, double cargoCapacity) {
+ this.speed = speed;
+ this.cost = cost;
+ this.cargoCapacity = cargoCapacity;
+ }
+
+ public Vehicle(double speed, double cost, int passengerSeats, double cargoCapacity) {
+ this.speed = speed;
+ this.cost = cost;
+ this.passengerSeats = passengerSeats;
+ this.cargoCapacity = cargoCapacity;
+ }
+
+ public double getSpeed() {
+ return speed;
+ }
+
+ public double getCost() {
+ return cost;
+ }
+
+ public double getCargoCapacity() {
+ return cargoCapacity;
+ }
+
+ public int getPassengerSeats() {
+ return passengerSeats;
+ }
+
+ public void transportPassengers(int numOfPassengers, double distance) {
+ double cost = distance * (numOfPassengers * 80) * this.cost / (1000 * 100);
+ double time = distance / this.speed;
+ System.out.printf("It would cost $ %.2f to transfer %d passengers for %.3f km for %.3f hours", cost, numOfPassengers, distance, time);
+ }
+
+ public void transportCargo(double weight, double distance) {
+ double cost = distance * weight * this.cost / (1000 * 100);
+ double time = distance / this.speed;
+ System.out.printf("It would cost $ %f to transfer %f cargo for %f km for %f hours", cost, weight, distance, time);
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task2/Main.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task2/Main.java
new file mode 100644
index 000000000..a6b5898d5
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task2/Main.java
@@ -0,0 +1,19 @@
+package ru.mirea.practice.s23k0120.task2;
+
+public abstract class Main {
+ public static void main(String[] args) {
+ final Phone phone1 = new Phone("1234", "Xiaomi", 250f);
+ final Phone phone2 = new Phone("+7911", "iPhone", 125.3f);
+ final Phone phone3 = new Phone("+9528", "Samsung", 212f);
+
+ phone1.recieveCall("Саня");
+
+ System.out.println(phone1.getNumber());
+ System.out.println(phone2.getNumber());
+ System.out.println(phone3.getNumber());
+
+ phone3.recieveCall("Даня", "777");
+
+ phone2.sendMessage("333", "1917", "2024", "88005553535");
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task2/Phone.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task2/Phone.java
new file mode 100644
index 000000000..9ef5f4dd3
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task2/Phone.java
@@ -0,0 +1,41 @@
+package ru.mirea.practice.s23k0120.task2;
+
+public class Phone {
+ String number;
+ String model;
+ float weight = 0;
+
+ public Phone() {
+ // Default constructor
+ }
+
+ public Phone(String number, String model) {
+ this.number = number;
+ this.model = model;
+ }
+
+ public Phone(String number, String model, float weight) {
+ Phone phone = new Phone(number, model);
+ this.number = phone.number;
+ this.model = phone.number;
+ this.weight = weight;
+ }
+
+ public void recieveCall(String caller) {
+ System.out.println("Звонит " + caller);
+ }
+
+ public void recieveCall(String caller, String number) {
+ System.out.println("Звонит " + caller + " по номеру " + number);
+ }
+
+ public void sendMessage(String... args) {
+ for (String arg : args) {
+ System.out.println(arg);
+ }
+ }
+
+ public String getNumber() {
+ return number;
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task4/Main.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task4/Main.java
new file mode 100644
index 000000000..e84c8a6d3
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task4/Main.java
@@ -0,0 +1,28 @@
+package ru.mirea.practice.s23k0120.task4;
+
+public abstract class Main {
+ public static void main(String[] args) {
+ Matrix matr1 = new Matrix(new float[][]{{1, 2, 3}, {3, 4, 5}});
+
+ Matrix matr2 = new Matrix(new float[][]{{1, 1, 1}, {2, 2, 2}});
+
+ System.out.printf("rows = %d columns = %d\n", matr1.getRows(), matr1.getColumns());
+
+ System.out.println(matr1);
+ System.out.println(matr2);
+
+ System.out.println(Matrix.add(matr2, matr1));
+ matr1.add(new Matrix(new float[][]{{1, 1, 1}, {-10, -10, -10}}));
+ System.out.println(matr1);
+
+ Matrix matr3 = new Matrix(new float[][]{{1, 2}, {3, 4}});
+ Matrix matr4 = new Matrix(new float[][]{{1, 1}});
+ Matrix matr5 = new Matrix(new float[][]{{1}, {0}});
+
+ System.out.println(matr4.size());
+ System.out.println(matr3.multiplyLeft(matr4));
+ System.out.println(matr5.multiplyLeft(matr3));
+
+ System.out.println(Matrix.multiply(matr4, matr5));
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task4/Matrix.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task4/Matrix.java
new file mode 100644
index 000000000..efc6b424e
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task4/Matrix.java
@@ -0,0 +1,121 @@
+package ru.mirea.practice.s23k0120.task4;
+
+import java.util.Arrays;
+
+public class Matrix {
+ private float[][] values;
+ private int rows;
+ private int columns;
+
+ public Matrix(float[][] arr) {
+ this.values = arr;
+ this.rows = arr.length;
+ this.columns = arr[0].length;
+ }
+
+ public int getRows() {
+ return rows;
+ }
+
+ public int getColumns() {
+ return columns;
+ }
+
+ public void add(Matrix matrix) {
+ if (matrix.columns != this.getColumns() || matrix.rows != this.getRows()) {
+ throw new RuntimeException(String.format("Size mismatch error: attempting to add %s to %s", matrix.size(), this.size()));
+ }
+ for (int i = 0; i < rows; i++) {
+ for (int j = 0; j < columns; j++) {
+ this.values[i][j] += matrix.values[i][j];
+ }
+ }
+ }
+
+ public static Matrix add(Matrix matrixA, Matrix matrixB) {
+ if (matrixA.columns != matrixB.getColumns() || matrixA.rows != matrixB.getRows()) {
+ throw new RuntimeException(String.format("Size mismatch error: attempting to add %s to %s", matrixB.size(), matrixB.size()));
+ }
+ Matrix matrix = new Matrix(new float[matrixB.rows][matrixA.columns]);
+
+ for (int i = 0; i < matrixA.rows; i++) {
+ for (int j = 0; j < matrixA.columns; j++) {
+ matrix.values[i][j] = matrixA.values[i][j] + matrixB.values[i][j];
+ }
+ }
+ return matrix;
+ }
+
+ public void multiply(float scalar) {
+ for (int i = 0; i < rows; i++) {
+ for (int j = 0; j < columns; j++) {
+ this.values[i][j] *= scalar;
+ }
+ }
+ }
+
+ public static Matrix multiply(Matrix matrix, float scalar) {
+ Matrix matrixA = new Matrix(new float[matrix.rows][matrix.columns]);
+
+ for (int i = 0; i < matrixA.rows; i++) {
+ for (int j = 0; j < matrixA.columns; j++) {
+ matrix.values[i][j] *= scalar;
+ }
+ }
+ return matrixA;
+ }
+
+ public static Matrix multiply(Matrix matrixA, Matrix matrixB) {
+ return matrixA.multiplyRight(matrixB);
+ }
+
+ public Matrix multiplyRight(Matrix matrix) {
+ if (matrix.getRows() != this.columns) {
+ throw new RuntimeException(String.format("Size mismatch error: attempting to multiply %s to %s", matrix.size(), this.size()));
+ }
+ float cellSum = 0;
+ Matrix matrix1 = new Matrix(new float[this.rows][matrix.columns]);
+ for (int i = 0; i < this.rows; i++) {
+ for (int j = 0; j < matrix.columns; j++) {
+ for (int k = 0; k < this.columns; k++) {
+ cellSum += this.values[i][k] * matrix.values[k][j];
+ }
+ matrix1.values[i][j] = cellSum;
+ cellSum = 0;
+ }
+ }
+ return matrix1;
+ }
+
+ public Matrix multiplyLeft(Matrix matrix) {
+ if (this.getRows() != matrix.columns) {
+ throw new RuntimeException(String.format("Size mismatch error: attempting to multiply %s to %s", matrix.size(), this.size()));
+ }
+ float cellSum = 0;
+ Matrix matrix1 = new Matrix(new float[matrix.rows][this.columns]);
+ for (int i = 0; i < matrix.rows; i++) {
+ for (int j = 0; j < this.columns; j++) {
+ for (int k = 0; k < matrix.columns; k++) {
+ cellSum += matrix.values[i][k] * this.values[k][j];
+ }
+ matrix1.values[i][j] = cellSum;
+ cellSum = 0;
+ }
+ }
+ return matrix1;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder stringBuilder = new StringBuilder();
+ for (float[] row : values) {
+ stringBuilder.append(Arrays.toString(row));
+ stringBuilder.append('\n');
+ }
+ return stringBuilder.toString();
+ }
+
+ public String size() {
+ return "Matrix{" + this.rows + "x" + this.columns + "}";
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task7/Learner.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task7/Learner.java
new file mode 100644
index 000000000..701a59ee3
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task7/Learner.java
@@ -0,0 +1,32 @@
+package ru.mirea.practice.s23k0120.task7;
+
+public class Learner {
+ String name;
+ int age;
+ float averageGrade;
+
+ public Learner() {
+ // Default constructor
+ }
+
+ public Learner(String name, int age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ public Learner(String name, int age, float grade) {
+ Learner learner = new Learner(name, age);
+ this.name = learner.name;
+ this.age = learner.age;
+ this.averageGrade = grade;
+ }
+
+ public void study() {
+ System.out.println(name + " учится");
+ }
+
+ @Override
+ public String toString() {
+ return "Учащийся{" + "ФИО= " + name + ", Возраст=" + age + " лет}";
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task7/Main.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task7/Main.java
new file mode 100644
index 000000000..36a88b6a6
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task7/Main.java
@@ -0,0 +1,28 @@
+package ru.mirea.practice.s23k0120.task7;
+
+public abstract class Main {
+ public static void main(String[] args) {
+ Student student1 = new Student("Иванов Иван Иванович", 19, 4.3f);
+ Student student2 = new Student("Соколов Петр Петрович", 18, 4.8f);
+ Student student3 = new Student("Стрижов Андрей Владимирович", 19, 3.2f);
+ Pupil pupil1 = new Pupil("Смирнова Анастасия Сергеевна", 14, 4.5f);
+ Pupil pupil2 = new Pupil("Чижиков Василий Ильич", 14, 2.3f);
+ Learner[] learners;
+ learners = new Learner[]{student1, pupil1, student2, student3, pupil2};
+
+ for (Learner learner : learners) {
+ if (learner instanceof Pupil) {
+ System.out.println(learner);
+ }
+ }
+ for (Learner learner : learners) {
+ if (learner instanceof Student) {
+ System.out.println(learner);
+ }
+ }
+
+ for (Learner learner : learners) {
+ learner.study();
+ }
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task7/Pupil.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task7/Pupil.java
new file mode 100644
index 000000000..876b0cdc4
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task7/Pupil.java
@@ -0,0 +1,25 @@
+package ru.mirea.practice.s23k0120.task7;
+
+public class Pupil extends Learner {
+ public Pupil() {
+ super();
+ }
+
+ public Pupil(String name, int age) {
+ super(name, age);
+ }
+
+ public Pupil(String name, int age, float grade) {
+ super(name, age, grade);
+ }
+
+ @Override
+ public void study() {
+ System.out.println(name + " делает домашку");
+ }
+
+ @Override
+ public String toString() {
+ return "Школьник{" + "ФИО= " + name + ", Возраст=" + age + " лет}";
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task7/Student.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task7/Student.java
new file mode 100644
index 000000000..9ee7083a8
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task7/Student.java
@@ -0,0 +1,25 @@
+package ru.mirea.practice.s23k0120.task7;
+
+public class Student extends Learner {
+ public Student() {
+ super();
+ }
+
+ public Student(String name, int age) {
+ super(name, age);
+ }
+
+ public Student(String name, int age, float grade) {
+ super(name, age, grade);
+ }
+
+ @Override
+ public void study() {
+ System.out.println(name + " сидит на парах");
+ }
+
+ @Override
+ public String toString() {
+ return "Студент{" + "ФИО= " + this.name + ", Возраст=" + this.age + " лет}";
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task8/Circle.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task8/Circle.java
new file mode 100644
index 000000000..d38ad57a2
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task8/Circle.java
@@ -0,0 +1,41 @@
+package ru.mirea.practice.s23k0120.task8;
+
+public class Circle extends Shape {
+ double radius;
+
+ public Circle() {
+ // Default constructor
+ }
+
+ public Circle(double radius) {
+ this.radius = radius;
+ }
+
+ public Circle(float radius, String color, boolean filled) {
+ super(color, filled);
+ this.radius = radius;
+ }
+
+ public double getRadius() {
+ return radius;
+ }
+
+ public void setRadius(float radius) {
+ this.radius = radius;
+ }
+
+ @Override
+ public double getPerimeter() {
+ return radius * Math.PI * 2;
+ }
+
+ @Override
+ public double getArea() {
+ return radius * radius * Math.PI;
+ }
+
+ @Override
+ public String toString() {
+ return "Circle{" + "radius=" + radius + ", color='" + color + '\'' + ", filled=" + filled + '}';
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task8/Rectangle.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task8/Rectangle.java
new file mode 100644
index 000000000..23365c29f
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task8/Rectangle.java
@@ -0,0 +1,52 @@
+package ru.mirea.practice.s23k0120.task8;
+
+public class Rectangle extends Shape {
+ protected double width = 0;
+ protected double length = 0;
+
+ public Rectangle() {
+ // Default constructor
+ }
+
+ public Rectangle(double width, double length) {
+ this.width = width;
+ this.length = length;
+ }
+
+ public Rectangle(double width, double length, String color, boolean filled) {
+ super(color, filled);
+ this.width = width;
+ this.length = length;
+ }
+
+ public double getWidth() {
+ return width;
+ }
+
+ public void setWidth(double width) {
+ this.width = width;
+ }
+
+ public double getLength() {
+ return length;
+ }
+
+ public void setLength(double length) {
+ this.length = length;
+ }
+
+ @Override
+ public double getPerimeter() {
+ return width * 2 + length * 2;
+ }
+
+ @Override
+ public double getArea() {
+ return width * length;
+ }
+
+ @Override
+ public String toString() {
+ return "Rectangle{" + "width=" + width + ", length=" + length + ", filled=" + filled + ", color='" + color + '\'' + '}';
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task8/Shape.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task8/Shape.java
new file mode 100644
index 000000000..69b052593
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task8/Shape.java
@@ -0,0 +1,45 @@
+package ru.mirea.practice.s23k0120.task8;
+
+public abstract class Shape {
+ protected String color;
+ protected boolean filled;
+
+ public Shape() {
+ // Default constructor
+ }
+
+ public Shape(String color, boolean filled) {
+ this.color = color;
+ this.filled = filled;
+ }
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+
+ public boolean isFilled() {
+ return filled;
+ }
+
+ public void setFilled(boolean filled) {
+ this.filled = filled;
+ }
+
+
+ public double getArea() {
+ return 0;
+ }
+
+ public double getPerimeter() {
+ return 0;
+ }
+
+ @Override
+ public String toString() {
+ return "Shape{" + "color='" + color + '\'' + ", filled=" + filled + '}';
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task8/Square.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task8/Square.java
new file mode 100644
index 000000000..ba8c23f9b
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task8/Square.java
@@ -0,0 +1,27 @@
+package ru.mirea.practice.s23k0120.task8;
+
+public class Square extends Rectangle {
+
+ public Square() {
+ // Default constructor
+ }
+
+ public Square(float side) {
+ super(side, side);
+ }
+
+ public Square(float side, String color, boolean filled) {
+ super(side, side, color, filled);
+ }
+
+
+ public void setSide(double side) {
+ this.width = side;
+ this.length = side;
+ }
+
+ @Override
+ public String toString() {
+ return "Rectangle{" + "side=" + width + ", filled=" + filled + ", color='" + color + '\'' + '}';
+ }
+}
diff --git a/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task8/Tester.java b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task8/Tester.java
new file mode 100644
index 000000000..f3779ab77
--- /dev/null
+++ b/students/23K0120/23K0120-p04_1/src/main/java/ru/mirea/practice/s23k0120/task8/Tester.java
@@ -0,0 +1,15 @@
+package ru.mirea.practice.s23k0120.task8;
+
+public abstract class Tester {
+ public static void main(String[] args) {
+ Circle circle = new Circle(5);
+ Rectangle rect = new Rectangle(10, 15);
+ Square square = new Square(20);
+
+ Shape[] shapes = {circle, rect, square};
+
+ for (Shape shape : shapes) {
+ System.out.printf("%s Perimeter: %f Area: %f\n", shape, shape.getPerimeter(), shape.getArea());
+ }
+ }
+}
diff --git a/students/23K0120/pom.xml b/students/23K0120/pom.xml
index bcca76646..11e2be12a 100644
--- a/students/23K0120/pom.xml
+++ b/students/23K0120/pom.xml
@@ -16,5 +16,7 @@
23K0120-p02
23K0120-p01
23K0120-p03
+ 23K0120-p04
+ 23K0120-p04_1