📜 ⬆️ ⬇️

Harmful Keyward Interface

, 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