Java for Beginner
Ребят создам пост в котором предлагаю делиться своими pet-проектами) Начну эстафету с себя) Восстановил мини консольную игру которую писал как обучающий проект) Ссылку на гит прилагаю, вроде должно все работать)) Конечно ж интересует Ваше мнение☺️ htt…
Остальным поделиться нечем?
Присоединяйтесь!
Присоединяйтесь!
Полиморфизм
Полиморфизм (от греч. "много форм") — один из основополагающих принципов объектно-ориентированного программирования (ООП), который позволяет объектам разных классов быть обработанными единообразно. Полиморфизм позволяет использовать один интерфейс для различных типов объектов.
Типы полиморфизма:
Компиляторный полиморфизм (статический полиморфизм): Достигается за счет перегрузки методов (method overloading).
Рантайм полиморфизм (динамический полиморфизм): Достигается за счет переопределения методов (method overriding) и использования наследования и интерфейсов.
Полиморфизм в Java достигается в первую очередь через наследование и интерфейсы.
Пример полиморфизма:
Рассмотрим пример с суперклассом Animal и подклассами Dog и Cat.
Использование полиморфизма:
Создадим класс Main, чтобы продемонстрировать полиморфизм.
Преимущества полиморфизма:
Гибкость: Позволяет обрабатывать объекты различных классов через общий интерфейс.
Расширяемость: Упрощает добавление новых классов, поскольку методы вызываются на основе общего интерфейса.
Читаемость и поддерживаемость: Уменьшает количество условных операторов, что делает код более чистым и понятным.
Полиморфизм и интерфейсы:
Полиморфизм также поддерживается через интерфейсы. Рассмотрим пример с интерфейсом Animal и классами Dog и Cat.
Использование полиморфизма с интерфейсами:
#Java #Training #ООП #Полиформизм
Полиморфизм (от греч. "много форм") — один из основополагающих принципов объектно-ориентированного программирования (ООП), который позволяет объектам разных классов быть обработанными единообразно. Полиморфизм позволяет использовать один интерфейс для различных типов объектов.
Типы полиморфизма:
Компиляторный полиморфизм (статический полиморфизм): Достигается за счет перегрузки методов (method overloading).
Рантайм полиморфизм (динамический полиморфизм): Достигается за счет переопределения методов (method overriding) и использования наследования и интерфейсов.
Полиморфизм в Java достигается в первую очередь через наследование и интерфейсы.
Пример полиморфизма:
Рассмотрим пример с суперклассом Animal и подклассами Dog и Cat.
// Суперкласс
public class Animal {
public void makeSound() {
System.out.println("Some generic animal sound");
}
}
// Подкласс
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
}
// Подкласс
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Meow! Meow!");
}
}
Использование полиморфизма:
Создадим класс Main, чтобы продемонстрировать полиморфизм.
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.makeSound(); // Выведет "Woof! Woof!"
myCat.makeSound(); // Выведет "Meow! Meow!"
}
}
Преимущества полиморфизма:
Гибкость: Позволяет обрабатывать объекты различных классов через общий интерфейс.
Расширяемость: Упрощает добавление новых классов, поскольку методы вызываются на основе общего интерфейса.
Читаемость и поддерживаемость: Уменьшает количество условных операторов, что делает код более чистым и понятным.
Полиморфизм и интерфейсы:
Полиморфизм также поддерживается через интерфейсы. Рассмотрим пример с интерфейсом Animal и классами Dog и Cat.
public interface Animal {
void makeSound();
}
public class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
}
public class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("Meow! Meow!");
}
}
Использование полиморфизма с интерфейсами:
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.makeSound(); // Выведет "Woof! Woof!"
myCat.makeSound(); // Выведет "Meow! Meow!"
}
}
#Java #Training #ООП #Полиформизм
Подписывайтесь на канал, здесь мы научим Вас Ctrl+C — Ctrl+V)
https://t.me/Java_for_beginner_dev
#Mems
https://t.me/Java_for_beginner_dev
#Mems
Что выведет код?
#Tasks
import java.util.*;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
Collections.reverse(numbers);
numbers.removeIf(n -> n % 2 == 0);
System.out.println(numbers);
}
}
#Tasks
Абстрактные классы и методы
Абстрактный класс — это класс, который не может быть инстанцирован и служит для определения общей функциональности, которую подклассы должны реализовать. Абстрактный метод — это метод без реализации, который должен быть переопределен в подклассе.
Абстрактный класс определяется с помощью ключевого слова abstract.
Подклассы абстрактного класса:
Подклассы абстрактного класса должны предоставить реализацию всех абстрактных методов суперкласса.
Использование абстрактного класса:
Преимущества использования абстрактных классов:
Повторное использование кода: Общие методы и свойства определяются в абстрактном классе и наследуются подклассами.
Организация и структурирование кода: Абстрактные классы помогают организовать иерархии классов и четко определить общие характеристики.
Принудительная реализация: Подклассы обязаны реализовать абстрактные методы, что обеспечивает консистентность в функциональности.
Разница между абстрактными классами и интерфейсами:
Множественное наследование: Класс может реализовывать несколько интерфейсов, но может наследоваться только от одного абстрактного класса.
Реализация методов: Интерфейсы не могут содержать реализацию методов (до Java 8, после появились default методы), в то время как абстрактные классы могут содержать методы с реализацией.
Использование в коде: Абстрактные классы используются для определения общего функционала с частичной реализацией, тогда как интерфейсы служат для определения контрактов без реализации.
Пример использования интерфейсов и абстрактных классов:
#Java #Training #ООП
Абстрактный класс — это класс, который не может быть инстанцирован и служит для определения общей функциональности, которую подклассы должны реализовать. Абстрактный метод — это метод без реализации, который должен быть переопределен в подклассе.
Абстрактный класс определяется с помощью ключевого слова abstract.
public abstract class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
public abstract void makeSound(); // Абстрактный метод
public void eat() {
System.out.println(name + " is eating");
}
}
Подклассы абстрактного класса:
Подклассы абстрактного класса должны предоставить реализацию всех абстрактных методов суперкласса.
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
}
public class Cat extends Animal {
public Cat(String name) {
super(name);
}
@Override
public void makeSound() {
System.out.println("Meow! Meow!");
}
}
Использование абстрактного класса:
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog("Buddy");
Animal myCat = new Cat("Whiskers");
myDog.makeSound(); // Выведет "Woof! Woof!"
myCat.makeSound(); // Выведет "Meow! Meow!"
myDog.eat(); // Выведет "Buddy is eating"
myCat.eat(); // Выведет "Whiskers is eating"
}
}
Преимущества использования абстрактных классов:
Повторное использование кода: Общие методы и свойства определяются в абстрактном классе и наследуются подклассами.
Организация и структурирование кода: Абстрактные классы помогают организовать иерархии классов и четко определить общие характеристики.
Принудительная реализация: Подклассы обязаны реализовать абстрактные методы, что обеспечивает консистентность в функциональности.
Разница между абстрактными классами и интерфейсами:
Множественное наследование: Класс может реализовывать несколько интерфейсов, но может наследоваться только от одного абстрактного класса.
Реализация методов: Интерфейсы не могут содержать реализацию методов (до Java 8, после появились default методы), в то время как абстрактные классы могут содержать методы с реализацией.
Использование в коде: Абстрактные классы используются для определения общего функционала с частичной реализацией, тогда как интерфейсы служат для определения контрактов без реализации.
Пример использования интерфейсов и абстрактных классов:
public interface Flyable {
void fly();
}
public abstract class Bird {
public abstract void makeSound();
public void layEggs() {
System.out.println("Laying eggs");
}
}
public class Sparrow extends Bird implements Flyable {
@Override
public void makeSound() {
System.out.println("Chirp! Chirp!");
}
@Override
public void fly() {
System.out.println("Flying high!");
}
}
public class Main {
public static void main(String[] args) {
Sparrow sparrow = new Sparrow();
sparrow.makeSound(); // Выведет "Chirp! Chirp!"
sparrow.fly(); // Выведет "Flying high!"
sparrow.layEggs(); // Выведет "Laying eggs"
}
}
#Java #Training #ООП
Интерфейсы
Интерфейс в Java — это абстрактный тип, который используется для указания на поведение, которое классы должны реализовать. Интерфейсы предоставляют способ достижения полной абстракции и множественного наследования.
Объявление интерфейса
Интерфейс объявляется с использованием ключевого слова interface.
Реализация интерфейса
Класс, который реализует интерфейс, должен предоставить реализацию всех методов, объявленных в интерфейсе.
Использование интерфейсов
Методы по умолчанию и статические методы
С Java 8 интерфейсы могут содержать методы по умолчанию (default methods) и статические методы.
Использование методов по умолчанию и статических методов
Множественное наследование через интерфейсы
Класс может реализовывать несколько интерфейсов, что позволяет комбинировать различные типы поведения.
Использование множественного наследования
Преимущества интерфейсов:
Полная абстракция: Интерфейсы обеспечивают полную абстракцию, так как методы интерфейсов не содержат реализацию (до Java 8).
Множественное наследование: Классы могут реализовывать несколько интерфейсов, что позволяет создавать гибкие и модульные системы.
Поддержка контрактов: Интерфейсы определяют контракт, который должен быть реализован классом, что обеспечивает консистентность и предсказуемость поведения.
#Java #Training #ООП
Интерфейс в Java — это абстрактный тип, который используется для указания на поведение, которое классы должны реализовать. Интерфейсы предоставляют способ достижения полной абстракции и множественного наследования.
Объявление интерфейса
Интерфейс объявляется с использованием ключевого слова interface.
public interface Animal {
void makeSound(); // Метод без реализации
}
Реализация интерфейса
Класс, который реализует интерфейс, должен предоставить реализацию всех методов, объявленных в интерфейсе.
public class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
}
public class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("Meow! Meow!");
}
}
Использование интерфейсов
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.makeSound(); // Выведет "Woof! Woof!"
myCat.makeSound(); // Выведет "Meow! Meow!"
}
}
Методы по умолчанию и статические методы
С Java 8 интерфейсы могут содержать методы по умолчанию (default methods) и статические методы.
public interface Animal {
void makeSound();
default void sleep() {
System.out.println("Sleeping...");
}
static void description() {
System.out.println("Animals can make sounds.");
}
}
public class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
}
Использование методов по умолчанию и статических методов
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.makeSound(); // Выведет "Woof! Woof!"
myDog.sleep(); // Выведет "Sleeping..."
Animal.description(); // Выведет "Animals can make sounds."
}
}
Множественное наследование через интерфейсы
Класс может реализовывать несколько интерфейсов, что позволяет комбинировать различные типы поведения.
public interface Flyable {
void fly();
}
public interface Swimmable {
void swim();
}
public class Duck implements Animal, Flyable, Swimmable {
@Override
public void makeSound() {
System.out.println("Quack! Quack!");
}
@Override
public void fly() {
System.out.println("Flying high!");
}
@Override
public void swim() {
System.out.println("Swimming in the pond!");
}
}
Использование множественного наследования
public class Main {
public static void main(String[] args) {
Duck myDuck = new Duck();
myDuck.makeSound(); // Выведет "Quack! Quack!"
myDuck.fly(); // Выведет "Flying high!"
myDuck.swim(); // Выведет "Swimming in the pond!"
}
}
Преимущества интерфейсов:
Полная абстракция: Интерфейсы обеспечивают полную абстракцию, так как методы интерфейсов не содержат реализацию (до Java 8).
Множественное наследование: Классы могут реализовывать несколько интерфейсов, что позволяет создавать гибкие и модульные системы.
Поддержка контрактов: Интерфейсы определяют контракт, который должен быть реализован классом, что обеспечивает консистентность и предсказуемость поведения.
#Java #Training #ООП
Рассмотрите следующий код. Какое значение будет напечатано в консоль при его выполнении?
#Tasks
public class Main {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
int result = 0;
for (int i = 0; i < arr.length; i += 2) {
result += arr[i];
}
System.out.println(result);
}
}
#Tasks
Различия между абстрактными классами и интерфейсами
Основные различия между абстрактными классами и интерфейсами:
Множественное наследование:
Абстрактные классы: Класс может наследовать только один абстрактный класс.
Интерфейсы: Класс может реализовывать несколько интерфейсов.
Методы с реализацией:
Абстрактные классы: Могут содержать как абстрактные методы (без реализации), так и методы с реализацией.
Интерфейсы: До Java 8 интерфейсы не могли содержать методов с реализацией. С Java 8 интерфейсы могут содержать методы по умолчанию и статические методы.
Ключевые слова:
Абстрактные классы: Определяются с использованием ключевого слова abstract.
Интерфейсы: Определяются с использованием ключевого слова interface.
Конструкторы:
Абстрактные классы: Могут иметь конструкторы.
Интерфейсы: Не могут иметь конструкторов.
Поле класса:
Абстрактные классы: Могут содержать поля (переменные экземпляра).
Интерфейсы: Могут содержать только константы (public static final поля).
Примеры для сравнения:
Абстрактный класс:
Интерфейс:
Сравнительное использование:
Когда использовать абстрактные классы и интерфейсы:
Используйте абстрактный класс, когда:
Вам нужно определить общие методы и поля, которые будут использоваться в подклассах.
Вам нужно предоставить частичную реализацию методов, которую могут переопределить подклассы.
Вам нужно использовать конструкторы для инициализации общих свойств.
Используйте интерфейсы, когда:
Вам нужно определить контракт для множества несвязанных классов.
Вам нужно поддерживать множественное наследование.
Вы хотите обеспечить полную абстракцию без предоставления реализации.
#Java #Training #ООП
Основные различия между абстрактными классами и интерфейсами:
Множественное наследование:
Абстрактные классы: Класс может наследовать только один абстрактный класс.
Интерфейсы: Класс может реализовывать несколько интерфейсов.
Методы с реализацией:
Абстрактные классы: Могут содержать как абстрактные методы (без реализации), так и методы с реализацией.
Интерфейсы: До Java 8 интерфейсы не могли содержать методов с реализацией. С Java 8 интерфейсы могут содержать методы по умолчанию и статические методы.
Ключевые слова:
Абстрактные классы: Определяются с использованием ключевого слова abstract.
Интерфейсы: Определяются с использованием ключевого слова interface.
Конструкторы:
Абстрактные классы: Могут иметь конструкторы.
Интерфейсы: Не могут иметь конструкторов.
Поле класса:
Абстрактные классы: Могут содержать поля (переменные экземпляра).
Интерфейсы: Могут содержать только константы (public static final поля).
Примеры для сравнения:
Абстрактный класс:
public abstract class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
public abstract void makeSound(); // Абстрактный метод
public void eat() {
System.out.println(name + " is eating");
}
}
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
}
Интерфейс:
public interface Animal {
void makeSound(); // Метод без реализации
default void sleep() {
System.out.println("Sleeping...");
}
}
public class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
}
Сравнительное использование:
public class Main {
public static void main(String[] args) {
// Абстрактный класс
Dog dog = new Dog("Buddy");
dog.makeSound(); // Выведет "Woof! Woof!"
dog.eat(); // Выведет "Buddy is eating"
// Интерфейс
Animal animal = new Dog();
animal.makeSound(); // Выведет "Woof! Woof!"
animal.sleep(); // Выведет "Sleeping..."
}
}
Когда использовать абстрактные классы и интерфейсы:
Используйте абстрактный класс, когда:
Вам нужно определить общие методы и поля, которые будут использоваться в подклассах.
Вам нужно предоставить частичную реализацию методов, которую могут переопределить подклассы.
Вам нужно использовать конструкторы для инициализации общих свойств.
Используйте интерфейсы, когда:
Вам нужно определить контракт для множества несвязанных классов.
Вам нужно поддерживать множественное наследование.
Вы хотите обеспечить полную абстракцию без предоставления реализации.
#Java #Training #ООП
Forwarded from RomanGV
This media is not supported in your browser
VIEW IN TELEGRAM
Всем приятных выходных!
Не думаем о работе, наслаждаемся летом и солнышком🔆
Делитесь фото, как отдыхаете!😉
#Weekend
Не думаем о работе, наслаждаемся летом и солнышком🔆
Делитесь фото, как отдыхаете!😉
#Weekend
Что выведет код?
#Tasks
public class Main {
public static void main(String[] args) {
int x = 10;
int y = 5;
x += y; // x = x + y
y -= 3; // y = y - 3
x *= 2; // x = x * 2
y /= 2; // y = y / 2
System.out.println("x = " + x + ", y = " + y);
}
}
#Tasks
Варианты ответа:
Anonymous Quiz
0%
x = 20, y = 2
100%
x = 30, y = 1
0%
x = 15, y = 4
0%
x = 10, y = 2
Перегрузка метода
Перегрузка методов (method overloading) – это возможность создания в классе нескольких методов с одинаковым именем, но с разными параметрами.
Рассмотрим пример класса Calculator, который будет выполнять сложение двух и трех чисел:
В данном случае, у нас есть два метода add с одинаковым именем, но разными параметрами. Java определяет, какой метод вызвать на основе количества и типа переданных аргументов.
Варианты перегрузки
Можно выделить три варианта перегрузки.
По количеству параметров.
По типам параметров:
По порядку параметров:
Перегрузка — это часть полиморфизма, одной из ключевых составляющих объектно-ориентированного программирования. Главный плюс перегрузки в Java — можно использовать схожие методы с одинаковыми именами.
#Java #Training
Перегрузка методов (method overloading) – это возможность создания в классе нескольких методов с одинаковым именем, но с разными параметрами.
Рассмотрим пример класса Calculator, который будет выполнять сложение двух и трех чисел:
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
public int calculate(int a, int b) {
return a + b;
}
}
В данном случае, у нас есть два метода add с одинаковым именем, но разными параметрами. Java определяет, какой метод вызвать на основе количества и типа переданных аргументов.
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println("Сумма двух чисел: " + calc.add(2, 3)); // Выводит 5
System.out.println("Сумма трех чисел: " + calc.add(2, 3, 4)); // Выводит 9
}
}
Варианты перегрузки
Можно выделить три варианта перегрузки.
По количеству параметров.
public class Calculator {
void calculate(int number1, int number2) { }
void calculate(int number1, int number2, int number3) { }
}
По типам параметров:
public class Calculator {
void calculate(int number1, int number2) { }
void calculate(double number1, double number2) { }
}
По порядку параметров:
public class Calculator {
void calculate(double number1, int number2) { }
void calculate(int number1, double number2) { }
}
Перегрузка — это часть полиморфизма, одной из ключевых составляющих объектно-ориентированного программирования. Главный плюс перегрузки в Java — можно использовать схожие методы с одинаковыми именами.
#Java #Training
This media is not supported in your browser
VIEW IN TELEGRAM
Уважаемые подписчики!
Сегодня в 16:00 по МСК, @MrAbhorrent проведет вторую часть урока по написанию игры крестики-нолики!
Присоединяйтесь!
От нас лайф-кодинг для новичков и печеньки, от Вас - адекватное общение!)))
Ждем Всех!
Общаться будем через Яндекс.Телемост, ссылку опубликуем в нашем чате! - https://t.me/Java_Beginner_chat
Сегодня в 16:00 по МСК, @MrAbhorrent проведет вторую часть урока по написанию игры крестики-нолики!
Присоединяйтесь!
От нас лайф-кодинг для новичков и печеньки, от Вас - адекватное общение!)))
Ждем Всех!
Общаться будем через Яндекс.Телемост, ссылку опубликуем в нашем чате! - https://t.me/Java_Beginner_chat
Пакеты и импорт
Пакеты в Java — это механизм организации классов и интерфейсов в логические группы. Они помогают избежать конфликтов имен, управлять доступом к классам и упрощают управление проектом.
Создание пакетов
Для создания пакета используется ключевое слово package, которое должно быть первой строкой в файле Java, перед любыми импортами или определениями классов.
Пример создания пакета:
Структура пакетов
Пакеты организуются иерархически, как директории в файловой системе. Например, пакет com.example.myapp будет находиться в директории com/example/myapp.
Пример файловой структуры:
Импорт пакетов
Для использования классов из других пакетов необходимо их импортировать. Импорт осуществляется с использованием ключевого слова import.
Пример импорта:
Можно импортировать все классы из пакета, используя *:
Полное имя класса
Классы можно использовать с полным именем (включая пакет), без необходимости импортировать их:
Пример создания пакета и его использования:
Файл: com/example/myapp/Utils.java
Файл: com/example/myapp/Main.java
Преимущества использования пакетов:
Организация кода: Пакеты помогают логически группировать связанные классы и интерфейсы.
Избежание конфликтов имен: Пакеты предотвращают конфликт имен, поскольку классы с одинаковыми именами могут существовать в разных пакетах.
Контроль доступа: Пакеты позволяют управлять доступом к классам и методам, используя модификаторы доступа (default и protected).
Упрощение навигации: Структурированные пакеты облегчают навигацию по проекту и поиск нужных классов.
#Java #Training
Пакеты в Java — это механизм организации классов и интерфейсов в логические группы. Они помогают избежать конфликтов имен, управлять доступом к классам и упрощают управление проектом.
Создание пакетов
Для создания пакета используется ключевое слово package, которое должно быть первой строкой в файле Java, перед любыми импортами или определениями классов.
Пример создания пакета:
package com.example.myapp;
Структура пакетов
Пакеты организуются иерархически, как директории в файловой системе. Например, пакет com.example.myapp будет находиться в директории com/example/myapp.
Пример файловой структуры:
src
└── com
└── example
└── myapp
├── Main.java
└── Utils.java
Импорт пакетов
Для использования классов из других пакетов необходимо их импортировать. Импорт осуществляется с использованием ключевого слова import.
Пример импорта:
import com.example.myapp.Utils;
Можно импортировать все классы из пакета, используя *:
import com.example.myapp.*;
Полное имя класса
Классы можно использовать с полным именем (включая пакет), без необходимости импортировать их:
public class Main {
public static void main(String[] args) {
com.example.myapp.Utils.printHello();
}
}
Пример создания пакета и его использования:
Файл: com/example/myapp/Utils.java
package com.example.myapp;
public class Utils {
public static void printHello() {
System.out.println("Hello from Utils!");
}
}
Файл: com/example/myapp/Main.java
package com.example.myapp;
import com.example.myapp.Utils;
public class Main {
public static void main(String[] args) {
Utils.printHello();
}
}
Преимущества использования пакетов:
Организация кода: Пакеты помогают логически группировать связанные классы и интерфейсы.
Избежание конфликтов имен: Пакеты предотвращают конфликт имен, поскольку классы с одинаковыми именами могут существовать в разных пакетах.
Контроль доступа: Пакеты позволяют управлять доступом к классам и методам, используя модификаторы доступа (default и protected).
Упрощение навигации: Структурированные пакеты облегчают навигацию по проекту и поиск нужных классов.
#Java #Training