package king;
class King extends Prr implements Aaa{
void aa(){
System.out.println(a); //에러 : 변수 a가 어디 a인지 모르겠다네요.
}
public static void main(String[] arr){
King k = new King();
k.aa();
Prr p = k;
p.aa();
}
}
class Prr{
public int a = 10;
void aa(){
System.out.println(a);
}
}
interface Aaa{
public static final int a = 30;
public abstract void aa();
}
다중상속의 조상 클래스 2개가 똑같은 메소드 이름과 매개변수를 가지는 경우의 충돌때문에.
단일상속으로 만들고 인터페이스로 보완한다인데... 메소드 겹치는 상황은 오버라이딩으로
때울만 했겠지만 그 둘의 지역변수가 그 둘 각자의 틀 안에 똑같은 이름이라면?
과연 최하위 클래스에서 그 메소드만 오버라이딩하면서 변수 a를 쓰면 상위클래스 멤버변수
a를 가져다 쓸까 아니면 인터페이스 클래스변수 a를 가져다 쓸까?
컴파일 해보니 이 a가 문제라 컴파일이 안된다네요...
역시 자바는 완벽하지 않다.
그리고 인터페이스 멤버 변수는 왜 꼭 public static final 이어야 하고 메서드는 왜 꼭 public 이어야 하나요?
자바가 병신이라그럼
super
자바공부 다시하렴^^
멀 다시함
멤버 변수가 아니라 상수, 인터페이스는 순수 가상 클래스처럼 써야되서 변수 개념이 없다.
자바에서 상수 개념을 모르는거같고, 상수 이름을 소문자로 쓰는건 ㅂㅅ짓이라는 소리도 있고, 자바공부 다시하렴^^ 에 동의한다.
너 지금 단일상속+인터페이스 문법 써서 다중상속으로 억지로 바꿀라는 거잖아. 인터페이스는 아직 안 짜둔 가상의 메쏘드랑 변수 모아둔 클래스의 개념인데 그걸 "그런데 그 일이 실제로 일어났습니다.."하고 바꾸면 당연히 타입 권한(?) 똑같게 승격한거고 오버라이딩에 우선순위를 네가 부여 안한거잖아. 대충 말해서 1이랑 2중에 숫자 가져와 한 거랑 똑같단 말이다.
이 새키 전부터 귀여움 ㅋㅋ
이건 한마디로 말해 어느 언어에나 있는 교차 포함의 오류를 가지고 자바는 안되니까 쓰레기다 라는 소리를 하는 것