Vehicle obj = new Car("Spark");
여기서 맨앞에 있는 Vehicle 는 클래스 이름을 써준것이고
중간에 있는 obj 은 객체 변수의 이름입니다
중간에 있는 new 는 객체 생성 예약어이고
맨뒤에 있는 Car( ) 는 생성자 입니다
Car 클래스의 생성자를 이용하여 Vehicle 클래스의 객체 변수 obj를 선언하고, “Spark”를 인수로 Car 클래스의 생성자를 호출합니다
이렇게 형 변환이 발생했을 때 부모 클래스와 자식 클래스에 동일한 속성이나 메소드가 있으면 부모클래스의 속성이나 메소드가 자식 클래스의 속성이나 메소드로 재정의 됩니다
행복한 하루되세요 :)
이라는 답변을 받았는데요
제가 이해하기를 형변환이 일어나면 부모클래스를 자식클래스의 것으로 정의했기 때문에 부모 클래스의 속성, 메소드를 호출시 자식메소드, 속성을 대신 사용한다.
라고 이해했고 but 이 문제에서는 obj. get name () 호출했으나 () 자료형이 다르기에 부모 객체변수를 그냥 써주겠다는 문제로 이해했는데.
사실 자식클래스로 객체변수를 선언을했지만 어떻게 부모메소드를 사용할 수 있는것인가요 ?
ex) A라는 부모가 B라는 자식의 후라이팬 두손으로 요리하는 방식을 사람들에게 정의해 줬지만, 자식이 국자밖에 가지고 있지않아 자식의 요리하는 방식이아닌 부모가 요리하는 방식을 사람들에게 메소드호출 한다는 것이 이해가 안갑니다.
예시가 적절한가요 ..?
그리고 객체 변수라는것이 사실 코드로는 보이지 않는것인가요? 코드를 쭉 보면 OBJ 라는 문구 ? 를 PRINT를 제외한 코드에서 볼 수 없습니다.
객체변수를 선언한다는 것이 좀 잘 안와닿아요 뭐... 직접적인 코드를 사용하기보다는 객체변수란 자식과 부모사이의 연결고리를 만들어준다 ( 형변환을 통하여 ) 라고 이해하면 되는건가요 ?
안녕하세요 길벗수험서 운영팀입니다.
Vehicle obj = new Car("Spark");
System.out.print(obj.getName( ));
첫번째 줄에서 객채 변수를 선언할때 부모 클래스의 객체 변수를 선언하면서 자식 클래스의 생성자를 사용하면 형 변환이 발생했습니다
두번째 줄에서 객체 변수 obj의 getName( ) 메소드를 호출하는데
첫번째 줄에서 객체 변수를 선언할때 형변환이 발생했기 때문에 Car 클래스의 getName( )이라고 생각할 수 있지만
메소드의 이름이 동일해도 ‘인수의 자료형과 개수’가 다르면 서로 다른 메소드 입니다.
이것은 예를들어 김철수가 있고, 이철수가 있고, 박철수가 있을때 이름은 모두 철수지만 서로 다른사람입니다.
자식 클래스에는 getName(String val), getName(byte[ ] val) 이렇게 두가지의 메소드가 있고
부모 클래스에는 getName( ) 메소드가 있는데 이때 자료형과 개수가 모두다 다르니 3가지 메소드 모두 서로 다른 메소드 입니다
두번째 줄에서 객체 변수 obj의 getName( ) 메소드를 호출할때 자식클래스에 동일한 getName( ) 메소드가 없으니
부모 클래스의 getName( )을 호출하는 것입니다.
행복한 하루되세요 :)
-
관리자2024-07-22 20:37:29
안녕하세요 길벗수험서 운영팀입니다.
Vehicle obj = new Car("Spark");
System.out.print(obj.getName( ));
첫번째 줄에서 객채 변수를 선언할때 부모 클래스의 객체 변수를 선언하면서 자식 클래스의 생성자를 사용하면 형 변환이 발생했습니다
두번째 줄에서 객체 변수 obj의 getName( ) 메소드를 호출하는데
첫번째 줄에서 객체 변수를 선언할때 형변환이 발생했기 때문에 Car 클래스의 getName( )이라고 생각할 수 있지만
메소드의 이름이 동일해도 ‘인수의 자료형과 개수’가 다르면 서로 다른 메소드 입니다.
이것은 예를들어 김철수가 있고, 이철수가 있고, 박철수가 있을때 이름은 모두 철수지만 서로 다른사람입니다.
자식 클래스에는 getName(String val), getName(byte[ ] val) 이렇게 두가지의 메소드가 있고
부모 클래스에는 getName( ) 메소드가 있는데 이때 자료형과 개수가 모두다 다르니 3가지 메소드 모두 서로 다른 메소드 입니다
두번째 줄에서 객체 변수 obj의 getName( ) 메소드를 호출할때 자식클래스에 동일한 getName( ) 메소드가 없으니
부모 클래스의 getName( )을 호출하는 것입니다.
행복한 하루되세요 :)