Как связать классы в java
1 Использование интерфейсов - классы могут реализовывать интерфейсы, которые определяют набор методов, которые класс должен реализовать. Интерфейсы используются для реализации полиморфизма, то есть возможности использовать объекты разных классов, которые реализуют один и тот же интерфейс, в качестве аргументов методов или элементов массива.
Для связывания классов и интерфейсов используется ключевое слово implements
. Если класс реализует интерфейс, он должен реализовать все методы, определенные в интерфейсе.
Рассмотрим пример: у нас есть интерфейс Animal
, который определяет методы для работы с животными. Класс Dog
реализует интерфейс Animal
и реализует методы интерфейса.
interface Animal {
void eat();
void sleep();
}
class Dog implements Animal {
public void eat() {
System.out.println("Dog is eating");
}
public void sleep() {
System.out.println("Dog is sleeping");
}
}
- Здесь мы определяем интерфейс
Animal
, который имеет два абстрактных методаeat()
иsleep()
. - Затем мы определяем класс
Dog
, который реализует интерфейсAnimal
и реализует оба метода.
Когда мы создаем объект Dog
, мы можем вызывать методы eat()
и sleep()
, определенные в интерфейсе Animal
Dog myDog = new Dog();
myDog.eat(); // => Dog is eating
myDog.sleep(); // => Dog is sleeping
Ключевое слово implements
позволяет связать класс и интерфейс. Если класс реализует несколько интерфейсов, они перечисляются через запятую в списке implements
interface Animal {
void eat();
}
interface Sleepable {
void sleep();
}
class Dog implements Animal, Sleepable {
public void eat() {
System.out.println("Dog is eating");
}
public void sleep() {
System.out.println("Dog is sleeping");
}
}
Здесь класс Dog
реализует два интерфейса Animal
и Sleepable
В Java классы можно связывать с помощью разных механизмов, в зависимости от того, какие отношения между классами нужны.
2 Наследование - один класс может быть наследником другого класса. Узнать об этом подробнее можно по ссылке
3 Композиция - один класс может содержать объекты другого класса. Такой подход используется, когда нужно создать объект, состоящий из других объектов. Композиция реализуется путем создания свойства в классе, которое является объектом другого класса. Например:
public class Address {
private String city;
private String street;
public Address(String city, String street) {
this.city = city;
this.street = street;
}
// геттеры и сеттеры
}
public class Person {
private String name;
private Address address;
public Person(String name, Address address) {
this.name = name;
this.address = address;
}
// геттеры и сеттеры
}
В данном примере класс Person
содержит свойство address
, которое является объектом класса Address
.