📜 ⬆️ ⬇️

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