두 차일 클래스는 모두 서로의 객체를 구성으로 서로 통신 할 수 있습니다.
은의이 이해하기 Wikipedia article "Twin pattern"에서 다음의 예를 보자 :
public class BallItem extends GameItem {
BallThread twin;
int radius; int dx, dy;
boolean suspended;
public void draw(){
board.getGraphics().drawOval(posX-radius, posY-radius,2*radius,2*radius);
}
public void move() {
posX += dx; posY += dy;
}
public void click() {
if (suspended) twin.resume(); else twin.suspend();
suspended = ! suspended;
}
public boolean intersects (GameItem other) {
if (other instanceof Wall)
return posX - radius <= other.posX && other.posX <= posX + radius || posY - radius <= other.posY && other.posY <= posY + radius;
else return false;
}
public void collideWith (GameItem other) {
Wall wall = (Wall) other;
if (wall.isVertical) dx = - dx; else dy = - dy;
}
}
public class BallThread extends Thread {
BallItem twin;
public void run() {
while (true) {
twin.draw(); /*erase*/ twin.move(); twin.draw();
}
}
}
이의이 BallThread이 스레드와 BallItem 모두 확장 싶다고 가정하자. 그러나 볼 때 BallThread는 Thread를 상속 받았으며 BallItem 클래스를 구성했습니다. BallItem 클래스를 참조하거나 BallItem 클래스를 작성함으로써 BallThread는 BallItem 클래스의 모든 메서드를 호출 할 수 있습니다.
따라서 BallThread는 Thread 클래스를 상속하고 BallItem 클래스를 구성하여 다중 상속을 구현하고 있습니다.