나는 기본 추상 클래스에서 클래스를 파생합니다. 내 추상 클래스에는 네 가지 추상 메서드가 있습니다. 파생 클래스의 모든 메서드를 재정의하고 싶지 않습니다. 파생 클래스를 추상 클래스로 선언하지 않고 어떻게해야합니까?파생 클래스를 추상 클래스로 만들지 않고 파생 클래스의 추상 클래스 메서드 중 하나를 건너 뜁니다.
답변
추상 클래스 해야에서 파생 된 비 추상 클래스 당신은 그렇게하지 못할 상속 된 모든 추상 메소드 및 접근 자 (MSDN)
의 실제 구현을 포함한다. 이을 우회하면이를 구현하지 말아야합니다. 이는 파생 클래스가 완전히 구성되지 않았 음을 의미합니다. 그런 유형의 인스턴스를 어떻게 인스턴스화 할 수 있습니까? 이러한 유형은 실제로 인스턴스화 할 수 없으며 추상화라고해야합니다.
그러나 런타임 중에 파생 클래스에서 이러한 무시할 수있는 메서드를 무시할 수있는 방법이 있습니다. 당신은 가상 수 있도록 할 수의 (오버라이드 (런타임에 예외를 던져)
abstract class Vehicle
{
public abstract void Do();
}
class Car : Vehicle
{
public virtual void Do(){ throw InvalidOperationException(); }
}
class Hyundai : Car
{
public override void Do(){ //implementation }
}
은 아마도 대안이 기본 클래스 인터페이스를하고 명시 적으로 파생 클래스에서이를 구현하는 것입니다을 위해 더 파생 클래스에 대한 의미있는 어느 정도 그것을 숨길 것이다).
interface Vehicle
{
void Do();
}
class Car : Vehicle
{
void Vehicle.Do()
{
throw new InvalidOperationException();
}
}
class Hyundai : Car
{
//Do is not available here unless you cast it to base type, ie Vehicle
}
이 목적으로'NotImplementedException'을 사용하지 마십시오. 표현하고자하는 의도가 "연산이 유효하지 않다"면, InvalidOperationException을 사용하십시오. 개발 중에 ** 개발이 완료되었지만 아직 완료되지 않은 코드의 표식으로 개발 중에 'NotImplementedException'을 사용하고 배송하기 전에 모두 제거하십시오. 'NotImplementedException'을 사용하여 "의도적으로 구현되지 않았습니다"와 "이것이 구현되도록 설계되었습니다"를 모두 의미하는 경우, 혼란스러운 버그에 대비해야합니다. –
@EricLippert 공정한 포인트, 감사합니다. 그것을 업데이트합니다. – nawfal
- 1. 배열의 추상 클래스의 파생 클래스
- 2. 추상 클래스의 추상 메서드
- 3. 추상 클래스에서 클래스 파생 (C++)
- 4. 추상 기본 클래스의 포인터를 통해 파생 클래스 객체를 반환
- 5. 파생 클래스/기본 클래스의 객체에서 추상 메서드 호출
- 6. 추상 기본 클래스에서 파생 클래스의 c'tor 호출
- 7. 파생 클래스에 대한 추상 메서드 제한 제어
- 8. 추상 파생 클래스의 프로세스 함수 및 변수
- 9. 추상 클래스에서 파생 된 클래스를 인스턴스화하는 방법
- 10. 가장 파생 된 유형을 상속받은 추상 클래스
- 11. 나는 추상 클래스가 추상 클래스
- 12. 기본 클래스를 파생 클래스로 변환
- 13. 추상 클래스를 사용하여 파생 클래스의 요소 스택 구현
- 14. 추상 클래스의 그룹 메서드
- 15. 콘크리트 클래스에서 파생 된 추상 클래스
- 16. 추상 클래스 및 파생 클래스의 출력 연산자 (<<)
- 17. 파생 클래스의 템플릿 인수를 사용하는 추상 기본 클래스
- 18. 스칼라 : 추상 부모 클래스 매개 변수에서 올바른 자식 클래스를 파생
- 19. 각 파생 클래스를 Singleton이되도록 강제하는 추상 기본 클래스
- 20. 추상 클래스를 Java의 루트 클래스로 사용해야합니까?
- 21. 파생 클래스 객체의 포인터 배열 만들기. C++. 추상 기본 클래스
- 22. 두 추상 클래스의 상속
- 23. 추상 클래스 메서드 사용
- 24. 파생 클래스를 모른 채 상위 클래스의 파생 클래스 함수 호출
- 25. 파생 클래스의 호출 메서드
- 26. Django : 추상 파생 모델 검색
- 27. C++ 파생 클래스가 추상 오류입니다
- 28. 추상 기본 클래스를 일반 파생 클래스로 변환하고 하위 클래스의 속성에 액세스하는 방법은 무엇입니까? 다음과 같이
- 29. STL 추상 클래스로 정렬
- 30. 가상 클래스의 추상 메서드
왜이 작업을 수행 하시겠습니까? 추상적 인 방법에 대한 전체적인 생각은 당신이 그것을 무시할 수 있어야한다는 것입니다. –
대부분 파생 클래스에서 가상 메서드를 재정의하려는 경우 – OzrenTkalcecKrznaric
프로젝트 아키텍처에 대한 기본 클래스를 만드는 경우이 문제가 내 마음에 듭니다. 이것이 불가능하다는 것을 알고 있지만 트릭이나 다른 것이 있다고 생각합니다. 이것을 달성하십시오. – Vishwajeet