나는 두 개의 클래스가 있습니다. 나는이 작동하지 않습니다 때문이 아니라 그들이 할 생각 : 내가 '자료 그'에 getMax
의 매개 변수를 변경한다면fullfill에 Liskov 대체 원칙
Extended d = c.getMax(b); //doesn't work
Extended e = c.getMax(c);
이 두 클래스는 원칙을 fullfill에겠습니까?
나는 두 개의 클래스가 있습니다. 나는이 작동하지 않습니다 때문이 아니라 그들이 할 생각 : 내가 '자료 그'에 getMax
의 매개 변수를 변경한다면fullfill에 Liskov 대체 원칙
Extended d = c.getMax(b); //doesn't work
Extended e = c.getMax(c);
이 두 클래스는 원칙을 fullfill에겠습니까?
Liskov Substitution Principles에서는 유형을 확장 할 때 요구 사항이 기본과 동일하거나보다 편안해야하며 약속은 동일하거나 더 엄격해야한다고 규정합니다. 이 유형의 메소드는 여기에서 우리가 조사 할 때 가장 중요합니다.
우리는 클래스의 기존 약속을 깨뜨리지 않는 한 기본 클래스에 존재하지 않는 메서드는 신경 쓰지 않습니다. 이 방법은 그렇게하지 않으므로 관련이 없습니다.
public Extended getMax(Extended that){
return new Extended(Math.max(getValue(), that.getValue()));
}
무시하는 메소드는 정말 중요합니다. 자, 당신이 가지고있는 하나를 살펴 보자 :
public Base divide(Base that) {
return new Base(getValue()/that.getValue());
}
@Override
public Extended divide(Base that) {
return new Extended(getValue()/that.getValue());
}
Base
인스턴스가 전달되는 것을 그 getValue()
재정의 방법 0Base
인스턴스가 전달되고 해당 getValue()
이 0을 반환하지 않는다는 것입니다.Base
인스턴스가 반환된다는 것입니다.Base
인스턴스가 반환되고 그 인스턴스가 구체적으로 Extended
인스턴스라는 것을 보증합니다.따라서 이러한 클래스로 Liskov 대체 원리를 기리고 있습니다.
당신의 조각이 컴파일되지 않는 이유는 LSP와는 아무 상관이 없습니다 :
Base b = new Base(3);
Extended c = new Extended(4);
Extended d = c.getMax(b); //doesn't work
Extended e = c.getMax(c);
하나의 getMax
방법이를 그리고 구체적으로 Extended
인스턴스를합니다. 그러나 Base
인스턴스를 전달합니다.
이것이 작동하지 않는 것이 중요합니까? '확장 d = b.divide (c);'(처음 게시물에 b와 c를 추가했습니다) – binaryBigInt
@binaryBigInt 그 것을 포함하도록 편집했습니다. –
'b'란 무엇입니까? 'c' 란 무엇입니까? – Andremoniy
죄송합니다. 잃어 버렸습니다. – binaryBigInt