Skip to content

miqqra/MultipleInheritance

Repository files navigation

Multiple inheritance

Что такое Multiple inheritance

Multiple inheritance - библиотека для реализации множественного наследования в вашем коде

Имеет в себе аннотацию, указывающую, от каких классов следует отнаследоваться

@MultipleInheritance(classes = {B.class, C.class, D.class})
public class A extends AIntermediary {

    public int whatever(int a) {
        System.out.println("A says " + a);
        return super.whatever(a + 1);
    }
}

Для использования

1. Написание собственного класса

Предположим есть классы A и B с методом whatever()

public class A {

    public void whatever() {
        System.out.println("It's A");
    }
}
public class B {

    public void whatever() {
        System.out.println("It's B");
    }
}

Вы хотите написать класс С, который будет наследоваться от этих двух классов

Для этого над классами нужно указать аннотацию @MultipleInheritance() для родителей и потомка

@MultipleInheritance
public class A {

    public void whatever() {
        System.out.println("It's A");
    }
}
@MultipleInheritance
public class B {

    public void whatever() {
        System.out.println("It's B");
    }
}
@MultipleInheritance(classes = {A.class, B.class})
public class С {
    
    public void whatever() {
        System.out.println("It's C");
    }
}

2. Компиляция

После запуска mvn clean compile cгенерируются классы:

  • AIntermediary
  • BIntermediary
  • CIntermediary

3. Прописывание "классов-прослоек"

Для каждого класса пропишите наследование от соответствующего ему "класса-прослойки" и вызов метода super()

@MultipleInheritance
public class A extends AIntermediary {

    public void whatever() {
        System.out.println("It's A");
        super().whatever();
    }
}
@MultipleInheritance
public class B extends BIntermediary {

    public void whatever() {
        System.out.println("It's B");
        super().whatever();
    }
}
@MultipleInheritance(classes = {A.class, B.class})
public class С extends CIntermediary {
    
    public void whatever() {
        System.out.println("It's C");
        super().whatever();
    }
}

Требования

  • Java 17

Сборка проекта

Отклонируйте репозиторий multiple-inheritance:

git clone https://github.com/miqqra/MultipleInheritance.git

В склонированном проекте запустите

mvn package

Maven

Пример pom.xml с зависимостью multiple-inheritance

...

<properties>
    <multiple-inheritance.version>1.0.0</multiple-inheritance.version>
</properties>

...

<dependencies>

    <dependency>
        <groupId>com.squareup</groupId>
        <artifactId>javapoet</artifactId>
        <version>1.13.0</version>
    </dependency>
    <dependency>
        <groupId>ru.miqqra</groupId>
        <artifactId>multiple-inheritance</artifactId>
        <version>${multiple-inheritance.version}</version>
        <systemPath>
            ${basedir}/../MultipleInheritance/multiple-inheritance/target/multiple-inheritance-1.0.0.jar
        </systemPath>
    </dependency>
    
    ...

</dependencies>

...

Gradle

Пример build.gradle с зависимостью multiple-inheritance

dependencies {

    implementation 'com.squareup:javapoet:1.13.0'
    implementation files('/../MultipleInheritance/multiple-inheritance/target/multiple-inheritance-1.0.0.jar')
    
    ...
}
...

Intellij

Если вы используете Intellij, можете добавить конфигурацию сборки проекта

  1. Нажмите на main и выберите Edit configuration

img_5.png

  1. Во вкладке Modify options выберите Add before launh task

img.png

  1. Нажмите плюсик Add task

img_1.png

  1. Выберите Run maven goal

img_2.png

  1. В новой цели пропишите clean

img_3.png

  1. Поменяйте местами стадию Build и Run maven goal

img_4.png

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages