5.03. Основные элементы Java
Основные элементы Java
★ Пакеты группируют классы по смыслу для удобства структурирования и предотвращения коллизий имён.
Пример:
package com.myapp.model;
★ Классы – шаблоны (чертежи), которые описывают свойства и поведение (методы);
Класс создаётся по общему принципу, как мы изучили в примере в главе по ООП:
public class Car {
// Свойства (поля)
String brand;
int year;
// Метод
void startEngine() {
System.out.println(brand + " engine started");
}
}
★ Объект – конкретный экземпляр класса. Объект создаётся так:
Person person = new Person(); // объект
Упрощённо:
Класс имяПеременной = new Класс(); // объект
★ Интерфейсы - абстрактные карты поведения, которую должны реализовать классы через ключевое слово interface для объявления и implements для использования:
interface Flyable {
void fly();
}
class Bird implements Flyable {
public void fly() {
System.out.println("Раскрываем крылья...");
}
}
★ Конструкторы – методы, вызываемые при создании объекта. Используются для инициализации состояния:
class Animal {
Animal(String name) {
System.out.println("Animal constructor: " + name);
}
}
class Cat extends Animal {
Cat(String name) {
super(name); // вызов конструктора родителя
System.out.println("Cat constructor");
}
}
★ Свойства (поля класса) – это переменные, объявленные внутри класса, но вне методов. Поля бывают следующих видов:
- локальные переменные – объявлены внутри метода, недоступны за его пределами;
- поля класса (члены класса) – доступны всем методам класса;
- статические поля (static) – принадлежат самому классу, а не объекту.
★ Методы – блоки кода, которые можно вызывать по имени, позволяя повторно использовать логику. Они бывают с параметрами (указываются в скобках), и без возвращаемого значения (void):
public class Calculator {
// Метод с параметрами и возвращаемым значением
public int add(int a, int b) {
return a + b;
}
// Метод без возвращаемого значения (void)
public void printMessage(String message) {
System.out.println(message);
}
}
Методы могут быть переружены и переопределены.
★ Перегрузка методов (overloading) – это несколько методов с одним именем, но разными параметрами (по количеству, типу или порядку):
public class MathUtils {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
}
Выше приведён пример, где есть три метода add, но с разной сигнатурой – имя+список параметров. Возвращаемое значение не учитывается.
★ Переопределение методов (overriding) – подкласс предоставляет свою реализацию метода, который уже определён в родительском классе. При этом используется аннотация @Override. Чтобы переопределить метод, он должен быть public или protected. Пример:
class Animal {
public void makeSound() {
System.out.println("Издать какой-то звук");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Гав!");
}
}
Но к этому мы вернёмся позднее.
★ Переменные – это именованные хранилища данных определённого типа:
int age = 30;
String name = "Тимур";
double price = 9.99;
boolean isStudent = true;
Java – статически типизированный язык, то есть, тип переменной указывается при объявлении и не может меняться.
У каждой переменной есть область видимости, и зависит от того, где объявлена:
| Где объявлена? | Область видимости |
|---|---|
| Внутри метода | Доступна внутри метода |
Внутри блока кода {} | Только внутри этого блока |
| Как поле класса | Доступна во всём классе и других методах |
Поэтому, если переменную нужно будет использовать во всем классе, нужно объявить её как поле класса ещё до методов, которые будут с ней работать. Если же это переменная, которая нужна для определенной задачи в методе – то объявляется она внутри.
Пример:
public class ScopeExample {
int classLevelVar = 10; // Поле класса — доступно всем методам
void method() {
int methodVar = 20; // Доступна только в этом методе
if (true) {
int blockVar = 30; // Доступна только внутри if
}
// System.out.println(blockVar); Ошибка: переменная недоступна
}
}