, 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