Наследование в Java: класс и интерфейс

Наследование в java - это простое и мощное свойство в объектно-ориентированной концепции, оно позволяет переписать атрибуты и методы родительского класса в дочерний класс, и таким образом другой подкласс также может наследоваться от дочернего класса. Java использует это свойство во всех классах.

Ключевое слово, используемое для наследования в java  extends. Множественное наследование запрещено, но разрешено для interfaces.

Класс объекта

При программировании мы замечаем, что методы повторяются везде, например: toObject(), equals(), wait()... и так далее. Это связано с тем, что в java все классы наследуются от суперкласса. Объект  который является корнем всей иерархии.

Объектно-ориентированная древовидная иерархия в java
Все классы наследуются от Object

Example

В этом примере мы объявили класс person с атрибутами name и address. От Персоны наследуются оба подкласса: первый класс директор и второй класс Сотрудник, который имеет в качестве дополнительного атрибута salary.


class Person
{
public String name;
публичный Строковый адрес;
}
class Сотрудник продлевает Person
{
int salary ;
public Employee(String name, String address, int salary)
{
this.name=name;
this.address=адрес;
this.salary=salary;
}
}
class Director extends Person
{
public Director()
{
this.name= "name";
this.adresse= "адрес";
}
}

note:
Дочерний класс наследует объявленные членыprotected и public а также наследует члены private если он находится в том же пакете, что и родительский class.

Ключевое слово super в java

Класс Person можно расширить, чтобы унаследовать от него в подклассы, учитывая, что в этой компании есть несколько функций: инженер, бухгалтер, секретарь... etc.

Инженер по бухгалтерскому учету сотрудников UML

class Engineer extends Employee
{
public Engineer()
{
super("name","address",110);
}

public void concevoir(){System.out.println("Я инженер");}
public void developper(){};
}

class Accountant extends Employee
{
public Accountant()
{
this.name= "name";
this.adresse= "адрес";
this.salary = 3000;
}

public void manageAccounts(){};
public void gererLesBilans(){};
}
Мы видим структуру в виде иерархии, это дерево помогает нам понять структуру нашей программы. Разница между двумя классами Engineer и Employee заключается в использовании ключевого слова super в Engineer, которое напрямую вызывает конструктор родительского класса. По умолчанию super() вызывает производителя без аргументов и super(p1, p2,...) вызывает конструктор с аргументами.

Ключевое слово super также используется для вызова методов более высокого класса. Вот пример:


class Ingenieur_reseaux extends Employee
{
public Ingenieur_reseaux ()
{
super("name","address",3100);
}

public void concevoir(){
super.concevoir();
System.out.println("Я спроектировал сетевую архитектуру компании");
}
}
Без super метод design(), объявленный в конструкторе, Ingénieur_réseaux будет вызван вместо метода design(), объявленного в engineer, поэтому для обращения к родительскому методу нужно добавить ключевое слово  super.

Runtime:

Я инженер
Я спроектировал сетевую архитектуру компании

Наследование интерфейса в java

Множественное наследование разрешено для interfaces.

interface print{
void print();
}
interface display{
void display();
}
interface interfaceIA extends print,display{
void imprimer_afficher();
}
class testIA реализует interfaceIA{

void print(){System.out.println("Printing")};
void display(){System.out.println("Print Complete")};

public static void main(){
testIA test = new testIA();
test.print();
test.display();
}
}