인터페이스에서 다중 상속을 이해하려고합니다. 내가 VB.NET에 다음 웹 사이트에서 코드를 빌려 변환 한 : 나는 IWorker 인터페이스의 포인트는 IWorkable 및 IFeedable 인터페이스가 있다는 것을 지금 무엇을 이해하지 못하는 http://www.oodesign.com/interface-segregation-principle.html다형성 및 인터페이스
Public Interface IWorker
Inherits IFeedable, IWorkable
End Interface
Public Interface IWorkable
Sub work()
End Interface
Public Interface IFeedable
Sub eat()
End Interface
Public Class Worker
Implements IWorkable, IFeedable
Public Sub eat() Implements IFeedable.eat
End Sub
Public Sub work() Implements IWorkable.work
End Sub
End Class
Public Class Robot
Implements IWorkable
Public Sub work() Implements IWorkable.work
End Sub
End Class
Class Manager
Dim worker As IWorkable
Public Sub setWorker(ByVal w As IWorkable)
worker = w
End Sub
Public Sub manage()
worker.work()
End Sub
End Class
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Try
Dim Test As New Manager
Dim IWorkerRobot As IWorkable = New Robot
Test.setWorker(IWorkerRobot)
Catch ex As Exception
'I won't absorb the exception.
End Try
End Sub
End Class
(IWorker를 확장 IFeedable 및 IWorkable). 나는 이것이 다형성과 관련이있을 것이라고 확신하지만 잘 모르겠습니다.
코드 단편에서 IWorker를 정의하지 않는 이유는 단순히 사용하지 않기 때문입니다. 로봇의 정의를 임의로 확장하면 먹을 수도 있습니다. 예를 들어 인간과 완전히 다른 방식으로 배터리를 충전하려면 벽 소켓에 플러그를 꽂아야합니다. –
@ 한스 패전트, 상속 계층 구조가 유효한 것은 언제입니까? – w0051977
클래스 사이에 ** is-a ** 관계가있을 때. 매니저가 로봇이 아니라는 증거가 없습니다. 그러나 이것은 인터페이스가 아닌 클래스에 적용됩니다. IWorker는 인터페이스를 사용하는 클라이언트가 먹고 일하는 것을 요구할 수있는 인터페이스를 선언합니다. –