자바 에 서 는 왜 클래스 다 중 계승 을 허용 하지 않 지만 인터페이스 다 중 계승 을 허용 합 니까?
1910 단어 JAVA
interface a{
void b();
}
interface a1 extends a{
void b();
}
interface a2 extends a{
void b();
}
interface a12 extends a1,a2{
void b();
}
public class Main {
public static void main(String args[]){
}
}
위의 a1 과 a2 는 모두 인터페이스 a 를 계승 하여 b 방법의 정 의 를 얻 었 다.그리고 a12 는 a1 과 a2 를 다시 물 려 받 았 다.마찬가지 로 a12 는 b 방법의 정 의 를 얻 었 다.
그러나 상기 코드 중의 인터페이스 가 모두 클래스 로 바 뀌 었 다 고 가정 합 니 다.만약 에 a12 가 b 방법 을 덮어 쓰 지 않 았 다 면 a1 대 b 방법 이 실현 되 었 고 a2 도 b 방법 을 실현 했다 면 a12 가 계승 하 는 b 방법 은 도대체 어떤 유형의 b 방법 에서 나 온 것 입 니까?이곳 은 어떤 방법 도 버 리 는 것 이 좋 지 않 은 것 같다.
그래서 다 상속 은 갈등 이 생 길 수 있 습 니 다.
인 터 페 이 스 는 구체 적 으로 실현 되 지 않 았 기 때문에 이런 모순 이 나타 나 지 않 을 것 이다.
실현 되 지 않 으 면 더 물 려 받 을 수 있다 면 추상 류 는 더 물 려 받 을 수 있 느 냐 고 물 을 수도 있다.
정 답 은 안 돼!
구체 적 으로 왜 안 되 는 지 제 블 로그 에 계속 관심 을 가 져 주세요~
자,이제 말 하 자.추상 류 와 일반 류 가 많이 계승 되 고 있다 는 것 은 나 쁘 지 않다 고 생각한다.
다음 코드 보기:
abstract class a{
abstract void b();
void c(){
System.out.println("c()");
}
abstract void d();
abstract void e();
abstract void f();
}
abstract class b extends a{
abstract void b();
abstract void d();
abstract void e();
void f(){
System.out.println("f()");
}
/*abstract void f();*/
}
abstract class c extends a{
abstract void b();
abstract void d();
abstract void e();
abstract void f();
}
public class Main {
public static void main(String args[]){
}
}
만약 에 우리 가 b 와 c 를 계승 하고 f 방법 을 다시 쓰 지 않 는 다 고 가정 하면 문제 가 생 겼 다.류 d 안의 f 방법 은 누구의 f 방법 을 사용 하 는 것 입 니까?당신 은 클래스 b 가 모두 실현 되 었 다 고 생각 할 수 있 습 니 다.당연히 클래스 b 에서 이미 실현 한 f 방법 이 라 고 생각 할 수 있 습 니까?
네가 이렇게 생각한다 면 자바 컴 파일 러 는 류 c 안의 추상 적 인 방법 f 도 보존 할 만 한 특성 이 라 고 생각 할 것 이다.이때 모순 이 생 겼 다.
하지만 인 터 페 이 스 를 사용 하면 단일 합 니 다.모든 인 터 페 이 스 는 이 루어 지지 않 았 습 니 다~그 러 니 어느 인터페이스 에서 든 계승 하고 덮어 쓰 는 방법 은 상관 없습니다~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 객체 작성 및 제거 방법정적 공장 방법 정적 공장 방법의 장점 를 반환할 수 있습니다. 정적 공장 방법의 단점 류 공유되거나 보호된 구조기를 포함하지 않으면 이불류화할 수 없음 여러 개의 구조기 파라미터를 만났을 때 구축기를 고려해야 한다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.