// 아래 문제의 오류를 찾아보세요. 그리고 고쳐보세요.
class Joo extends Kbh
{
public static
void main(String[] args){
System.out.println(age);
}
}
class Kbh
{
String name =
"bong";
int age = 24;
int birth = 901116;
void seoil() {
System.out.println("bye");}
}
#개념
위에 문제는 상속을 통한 static 멤버와 관련된 오류입니다.
static멤버는 클래스가 메모리에 올라갈때 이미 자동적으로 생성되기에 인스턴스 생성하지 않고도
클래스이름.클래스멤버변수; 또는 클래스이름.클래스메서드(); 와 같이 사용할수 있다.
하지만 인스턴스 멤버는 인스턴스를 생성할때 만들어 진다. 그래서 static이 붙은 메서드를 호출할때
인스턴스가 생성되어있지 않을 수 있어서 static메서드에서는 인스턴스 변수를 사용할수 없다.
그러나 인스턴스 메서드 내에서는 static이 붙은 멤버를 사용할수 있다. 왜냐하면 인스턴스 멤버는
인스턴스가 만들어 진 후에 쓸수 있다고 했다. 그럼으로 인스턴스를 사용한다는것은 이미 인스턴스를 생성했다는
것 이기 때문이다.(인스턴스변수가 존재한다는 것은 이미 static이 붙은 멤버가 이미 메모리에 존재한다는 의미이다.)
#결론
그럼으로 위에 소스에서 잘못된점은 main()메서드 안에 인스턴스 변수인 age가 인스턴스 생성없이 사용 되어 에러가발생하였다.
main()도 메서드인데 제어자가 static이기때문에 클래스메서드 이고 클래스메서드 안에서 인스턴스변수 를 사용 하려면 객체를 생성한 후이거나 static age=24; 로 접근 하여야 한다.
중요한것은 main() 도 일반 다른 메서드들 처럼 메서드일뿐이다.!!