저번에 같은 문제의 질문에서 제가 java가 익숙하지못해 정확하게 질문을 드리지 못했는데 한번더 문제를 답지와같이 확인하면서 궁금한게 많이생겼는데 좀..상세하게 질문좀 드리겠습니다.
Q.1 왜 그냥 class 도 아니고, super - sub로 나누어지는 것도 아니고 abstract class 로 정의한 후에 부모클래스가 될 수 있었는지요 ?
부모, 자식 클래스를 설정하는데 있어서 클래스 정의는 큰의미없어도 설정이 가능한건가요? 전 대부분 super, sub 로 나누어져있는 상속문제를 많이 봐왔거든요..!
Q.2 3번째 줄에있는 abstract class 에서 추상메소드인 get name(string val) 을 선언하는데 아무리 봐도 저게 왜 있는지 모르겠습니다.
main 함수에서 print (obj. get name()) 에서 넘어올때 헷갈리라고 넣은 줄일뿐인건가요 ?
이 문제에서는 굳이 실행하지 않아도 되는 줄인지요..!
Q.3 car method 에서 main 함수에 있는 val 값을 부모클래스에게 넘겨준 후에 name 변수에 이름을 적고; 을 만나면 다시 반환 해 주는것이 맞나요?
(메소드 호출시에는 [ ~~~ ] ']' 을 만날때까지 메소드를 실행해야 함.)
Q.4 이 문제에서 byte[ ] 를 사용하지는 않았지만 이것은 무엇을 의미하는 것인가요 ?
Q.5 public ㅁ 메소드를 일반적으로 봐 왔는데,
abstract ㅁ 메소드와 차이점이 따로 있나요 ? 그냥 메소드를 호출하는 시작 이름일뿐,
public 이나 absract 정의후 메소드 이름이 나오는데 그 앞의 public 과 abstract 의 차이점을 알려주시면 감사하겠습니다.
Q.6 P.86 답지에서
① CAR 클래스의 생성자 - 생성자를 이용한다는게 무슨말인가요 ? 생성자가 뭔가요 ? 메소드를 이야기 하는것인가요 ?
(메소드 = 생성자?)
그다음 문장에 OBJ를 선언하고, OBJ는 부모클래스안에서 나와있지 않은데 main 함수에 정의되어있는 obj는 어떻게 사용하는 것이고 객체변수 를 선언했다. 이게 무슨말인지 잘 와닿지 않습니다. 객체변수가 뭐고 객체변수를 선언했다는게 어떤의미인가요 ?
뭐... c언어로 따지면 n = 3 으로 정의했을때 = 뒤에있는 숫자에 따라 n의 값이 바귀어 n이 변수인데 객체변수도 말이 객체변수이지 그냥 변수를 설정한다 이 이야기인가요 ?
문제에서 객체변수라는 말을 만났을때, 정보처리기사 필기책에있는 객체의 정의만으로는 뭔가 와닿지 않고 부족한 느낌이 들어 질문남깁니다.
②바로직전의 줄에 '이렇게 형변환이 발생했을때'
형변환이 무엇을 의미하는것인가요 ?
객체지향이 너무 와닿지않고 뭔가 구름에 둥둥떠있는것 같아서 상세하게 질문드렸습니다.
질문내용이 너무 길어 고생하실것 같은데 답변해주시면 감사하겠습니다.
고생하십니다 감사합니다...
: )
안녕하세요 길벗수험서 운영팀입니다.
첫번째 답변
extends [클래스명] - 클래스 정의 시 상속받을 클래스를 추가하는 예약어 입니다.
상속에서는 extends [클래스명]을 보고 판단해야 합니다
class Car extends Vehicle {
Car 클래스를 선언할때 extends Vehicle 예약어가 사용이 되었으니
이 코드를 보고 Vehicle 클래스는 부모 클래스, Car 클래스는 자식 클래스라는것을 알 수 있습니다
두번째 답변
abstract public String getName(String val);
추상 메소드 getName(String val)을 정의하는 것으로
abstract는 추상 클래스를 정의하는 명령어로, 추상 클래스 정의 시 꼭 써야하는 예약어입니다
추상 메소드는 선언만 있고 내부에 실행 코드가 없는 메소드 입니다.
이후 코드들 중 상속 관계가 설정된 자식 클래스에서 재정의한 후 사용합니다.
세번째 답변
name = super.name = val;
이 코드에서 super 라는것은 상속 관계에 있는 부모 클래스를 가리키는 예약어 입니다
이 문제에서는 부모클래스인 Vehicle 클래스를 말하는것 입니다.
val의 값 “Spark”를 부모 클래스인 Vehicle 클래스의 변수 name과 Car 클래스의 변수 name에 저장을 하라는것 입니다
네번째 답변
val의 값을 배열로 받는것입니다
다섯번재 답변
abstract는 추상 클래스를 정의하는 명령어로, 추상 클래스 정의 시 꼭 써야하는 예약어이고
말씀하신 public은 접근제어자의 종류중 하나입니다
접근제어자의 종류에는 public, private, protected, package 이렇게 4가지가 있습니다.
public - 어떤 클래스에서라도 접근이 가능합니다.
private - 해당 클래스 내부에서만 접근이 가능합니다.
protected - 동일 패키지 내의 클래스 또는 해당 클래스를 상속 받은 외부 패키지의 클래스에서 접근이 가능합니다.
package - 동일 패키지 내부에 있는 클래스에서만 접근이 가능합니다.
여섯번째 답변
이것을 어떻게 답변을 드려야 할지 정말 난감하네요
예를들어 아래와 같은 코드가 있다고 가정을 합니다.
여기서는 상속의 관계가 아닙니다.
ClassA cal = new ClassA( ); ClassA 클래스의 객체 변수 cal을 선언하는 코드 입니다.
여기서 맨앞에 있는 ClassA 는 클래스 이름을 써준것이고
중간에 있는 cal 은 객체 변수의 이름입니다
중간에 있는 new 는 객체 생성 예약어이고
맨뒤에 있는 ClassA( ) 는 생성자로 객체 변수 생성에 사용되는 메소드 입니다.
아래는 회원님께서 질문주신 상속 코드에 대한것입니다.
[부모클래스명] [객체변수명] = new [자식클래스생성자( )] - 부모 클래스의 객체 변수를 선언하는데 자식 클래스의 생성자를 사용하면 형 변환이 발생합니다.
여기서 형변환 이라는 것은 부모 클래스의 구조를 가지면서 자식 클래스의 속성이나 메소드로 재정의하고 싶을 때 사용하는 기법입니다.
Vehicle obj = new Car("Spark");
여기서 맨앞에 있는 Vehicle 는 클래스 이름을 써준것이고
중간에 있는 obj 은 객체 변수의 이름입니다
중간에 있는 new 는 객체 생성 예약어이고
맨뒤에 있는 Car( ) 는 생성자 입니다
Car 클래스의 생성자를 이용하여 Vehicle 클래스의 객체 변수 obj를 선언하고, “Spark”를 인수로 Car 클래스의 생성자를 호출합니다
이렇게 형 변환이 발생했을 때 부모 클래스와 자식 클래스에 동일한 속성이나 메소드가 있으면 부모클래스의 속성이나 메소드가 자식 클래스의 속성이나 메소드로 재정의 됩니다
행복한 하루되세요 :)
-
관리자2024-07-17 22:30:50
안녕하세요 길벗수험서 운영팀입니다.
첫번째 답변
extends [클래스명] - 클래스 정의 시 상속받을 클래스를 추가하는 예약어 입니다.
상속에서는 extends [클래스명]을 보고 판단해야 합니다
class Car extends Vehicle {
Car 클래스를 선언할때 extends Vehicle 예약어가 사용이 되었으니
이 코드를 보고 Vehicle 클래스는 부모 클래스, Car 클래스는 자식 클래스라는것을 알 수 있습니다
두번째 답변
abstract public String getName(String val);
추상 메소드 getName(String val)을 정의하는 것으로
abstract는 추상 클래스를 정의하는 명령어로, 추상 클래스 정의 시 꼭 써야하는 예약어입니다
추상 메소드는 선언만 있고 내부에 실행 코드가 없는 메소드 입니다.
이후 코드들 중 상속 관계가 설정된 자식 클래스에서 재정의한 후 사용합니다.
세번째 답변
name = super.name = val;
이 코드에서 super 라는것은 상속 관계에 있는 부모 클래스를 가리키는 예약어 입니다
이 문제에서는 부모클래스인 Vehicle 클래스를 말하는것 입니다.
val의 값 “Spark”를 부모 클래스인 Vehicle 클래스의 변수 name과 Car 클래스의 변수 name에 저장을 하라는것 입니다
네번째 답변
val의 값을 배열로 받는것입니다
다섯번재 답변
abstract는 추상 클래스를 정의하는 명령어로, 추상 클래스 정의 시 꼭 써야하는 예약어이고
말씀하신 public은 접근제어자의 종류중 하나입니다
접근제어자의 종류에는 public, private, protected, package 이렇게 4가지가 있습니다.
public - 어떤 클래스에서라도 접근이 가능합니다.
private - 해당 클래스 내부에서만 접근이 가능합니다.
protected - 동일 패키지 내의 클래스 또는 해당 클래스를 상속 받은 외부 패키지의 클래스에서 접근이 가능합니다.
package - 동일 패키지 내부에 있는 클래스에서만 접근이 가능합니다.
여섯번째 답변
이것을 어떻게 답변을 드려야 할지 정말 난감하네요
예를들어 아래와 같은 코드가 있다고 가정을 합니다.
여기서는 상속의 관계가 아닙니다.
ClassA cal = new ClassA( ); ClassA 클래스의 객체 변수 cal을 선언하는 코드 입니다.
여기서 맨앞에 있는 ClassA 는 클래스 이름을 써준것이고
중간에 있는 cal 은 객체 변수의 이름입니다
중간에 있는 new 는 객체 생성 예약어이고
맨뒤에 있는 ClassA( ) 는 생성자로 객체 변수 생성에 사용되는 메소드 입니다.
아래는 회원님께서 질문주신 상속 코드에 대한것입니다.
[부모클래스명] [객체변수명] = new [자식클래스생성자( )] - 부모 클래스의 객체 변수를 선언하는데 자식 클래스의 생성자를 사용하면 형 변환이 발생합니다.
여기서 형변환 이라는 것은 부모 클래스의 구조를 가지면서 자식 클래스의 속성이나 메소드로 재정의하고 싶을 때 사용하는 기법입니다.
Vehicle obj = new Car("Spark");
여기서 맨앞에 있는 Vehicle 는 클래스 이름을 써준것이고
중간에 있는 obj 은 객체 변수의 이름입니다
중간에 있는 new 는 객체 생성 예약어이고
맨뒤에 있는 Car( ) 는 생성자 입니다
Car 클래스의 생성자를 이용하여 Vehicle 클래스의 객체 변수 obj를 선언하고, “Spark”를 인수로 Car 클래스의 생성자를 호출합니다
이렇게 형 변환이 발생했을 때 부모 클래스와 자식 클래스에 동일한 속성이나 메소드가 있으면 부모클래스의 속성이나 메소드가 자식 클래스의 속성이나 메소드로 재정의 됩니다
행복한 하루되세요 :)
-
유*찬2024-07-20 19:29:36와..대박 ..감사합니다... : )