, interface , .
— ?
— Java C#?
— . ?
— !
— ? ? ?
— … !
— ?
— .
— ?
public abstract class MyInterface {
  public abstract void f();
}— , .
— , ?
— .
— , . ?
— , .
— , ?
— !
— … ? , ?
— , , .
— ?
— Java .
— ?
— .
— . (implements), (extend) ?
— , .
— , ?
— .
— ! ?
— (Deadly Diamond of Death)!
— ! ?
— , .
— - ?
class B {}
class D1 extends B {}   
class D2 extends B {}   
class M extends D1, D2 {}— , !
— ?
— B !
— ?
class B {private int i;}— ! i M?
— . . D1 D2 i, a M D1 D2 , M i?
— ! . M B i, M i.
— .
— !
— Java( C#) , - " "?
— . . Object.
— . Object ?
— … .
— . ?
— C++
— Eiffel .
— , Ruby !
— , " " , , .
— .
— . ?
public abstract class MyInterface {
      public abstract void f();
}— class .
— . , interface ?
— , .
— Java ( C#) ?
— ?
— .
— ??
— !
— ?
— , . , . interface.
— . , Java ?
— !
— . , . ?
— : ? ?
— , — (extends or implements)?
— ! , ?
— . Java . C# .
— . implements extends . Java C# C++.
— , . ?
— :
public class Subject {
    private List<Observer> observers = new ArrayList<>();
    private void register(Observer o) {
        observers.add(o);
    }
    private void notify() {
        for (Observer o : observers)
            o.update();
    }
}
public class MyWidget {...}
public class MyObservableWidget extends MyWidget, Subject {
    ...
}— ""!
— . "".
— , . .
— , .
— ? … MyWidget Subject!
— , MyWidget . (separation of concerns). , .
— MyObservableWidget.
— ? ? !
— MyObservableWidget Subject .
— ? - .
— -
— . .
— . , .
— . .
— , .
— ?
— , interface — !
.
Source: https://habr.com/ru/post/351384/
All Articles