묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 기본편
상속으로 부모클래스에 접근
[질문 내용]상속 단원에 문제와 풀이 관련해서 질문이 있습니다. 영한님께서는 상위 클래스의 필드에 접근하기 위해서 자식 클래스의 생성자 부분에서, super(name, price)을 사용하고 계십니다. 그 이유는 부모 클래스의 생성자가 기본 생성자가 아니기에, super을 생략하지 않고, 적은 것이지요.여기서. 부모 클래스의 생성자를 기본 생성자로 하고, 자식 클래스의 생성자 부분에서 name과 price를 불러들어와 값을 저장하고 싶을 때 this.name = name; this.price=price;로 접근해도 괜찮은가요?(부모 클래스의 필드가 public이였을 때)
-
해결됨[코드팩토리] [초급] 8시간만에 끝내는 코드팩토리의 Typescript 완전정복 풀코스
9_class/7_override.ts, super 키워드 질문
super키워드에 대해 궁금한 점이 있어서 질문 드립니다. 제가 알고 있는 super 키워드를 constructor에서 사용하는 경우는 부모 클래스에 있는 프로퍼티를 자식 클래스에서 따로 선언하지 않은 채로 그대로 상속받았을 때 super 키워드를 통해 부모 클래스의 constructor을 호출하여 그 프로퍼티들에 대한 값을 초기화하는 것으로 이해를 했었습니다. 그러나 위 강의에서 마지막 부분에 보면 class PropertyParent2, class PropertyChild2 는 모두 name이란 프로퍼티를 갖고 있습니다. 즉 제가 생각하기엔 Propertychild2의 name과 PropertyParent2의 name은 상속 받은 프로퍼티가 아닌 PropertyChild2만의 프로퍼티라고 생각하였습니다. 그런데 강사님이 PropertyChild2 클래스의 constructor에 super(name); this.name = name; 을 둘 다 적는 것을 보고 의문을 느껴 super(name); 부분을 주석 처리를 하였더니 상속받은 클래스의 constructor에서는 super키워드를 '반드시' 포함해야한다 라고 오류가 뜹니다. 제가 일전에 이해한 super 키워드에 대한 설명 자체가 잘못된 것인지 궁금하고 만약 제가 이해한 super 키워드에 대한 이해가 맞았다면 왜 저 코드에선 그러한 오류가 발생하는지 궁금합니다. 그리고 제가 틀렸다면 어떤 클래스로부터 상속받은 클래스가 있다면 그 클래스는 '반드시' super 키워드를 사용해야하는 것에 대한 답변도 듣고 싶습니다.
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
생성자 안에 메소드...?!
안녕하세요, 선생님...ㅎ 갑작스럽게 생각난 질문인데요...ㅎ 제가 예시로 아래처럼 클래스를 만들어 봤는데, 혹시 상속받은 클래스의 super(); 생성자 안에 이렇게 메소드도 넣을 수 있나요? 자바를 공부하면서 지금 여러 소스 코드들을 보고 있는데, 어느 소스코드는 super(); 생성자 안에 메소드를 집어 넣은 경우가 있더라구요?! 만약에 이렇게 만들 수 있다면, 언제 어느 때 가능할까요?클래스는 정말 제가 생각나는대로 적어서 컴파일 에러 같은 건 생각하지 않았습니다. 부디 너그럽게 봐주셨음 합니다...ㅎclass Kid extends SomethingAwesome { Kid(int age) { super(comment(age)); // super() 생성자 안에 comment메소드 삽입 } public String comment(int age) { String saySometing = ""; if (age > 3 && age < 7) { saySomething += "엄마, 과자 사줘!"; } else if (age >= 7 && age < 11) { saySomething += "엄마, 이젠 로보트 사줘!"; } return saySomething; } public static void main(String[] args) {...} // 메인 메소드 실행 }또한 일반적인 생성자 (Constructor)를 만들 때도, 생성자 안에 전달 값외에도 메소드를 넣을 수 있는가요? 이것도 마찬가지로 위에 예시로 코드를 적은 것 처럼 제 나름대로...ㅎ 써봤습니다...ㅎ 위의 예시 처럼 정말로 생성자 안에 메소드를 넣는게 가능한지 궁금해서 약간 무리수를 두면서(?) 코드를 적어봤습니다..ㅎ 이것도 너그럽게 봐주세요...ㅎ 감사합니다 : )class ThankYouNote { // 제가 생각해도 좀 많이 이상하지만, // 메소드를 이렇게 선언해서 do = thanks(); // this.do = do; 이렇게는 많이 무리수죠? ㅠㅠ // 저렇게 위 클래스 처럼 super 생성자 안에 메소드를 넣는건 처음봐요 ㅠㅠ ThankYouNote() { thanks(); // this(thanks()); // 너무 많이 무리수 인듯하지만 일단 적어봤습니다...ㅠㅜ } public void thanks() { System.out.println("나도코딩 선생님, 감사합니다. :)"); } public static void main(String[] args){ ... } // 메인 메소드 실행 }
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
super를 사용하는 건, 부모와 자식 클래스의 파라미터 이름이 꼭 같아야하나요?
OOP 상속 부분 강의에서 보면 부모클래스의 파라미터 이름과 자식 클래스 파라미터 이름을 다 같게 쓰시더라구요.혹시 변수 이름 구분을 하면 오류가 나는지 한번 구분을 해보았는데, super뒤의 부모 클래스 파라미터를 적는 부분에서 오류가 나더라구요.두 개를 다르게 지정하면 안되는건가요? 예를 들어 강의에 나온 대로 받은 입력을 2배하는 클래스, 4배하는 클래스를 만들었을 때class Timestwo { int number1; Timestwo(this.number1); int calculate(){ return this.number1 * 2; } } class Timesfour extends Timestwo{ Timesfour(int number2) : super(number1); int calculate(){ return super.number1 * 4; } }밑에서 5번째줄, Timesfour(int number2) : super(number1) 부분에서 number1아래에 빨간줄이 생겨요.저는 Timesfour(int number2)는 Timesfour라는 클래스의 파라미터를 받는 거라 아무 이름이어도 된다고 생각했고,super( )안은 부모클래스(Timestwo)의 파라미터를 받는거라 number1을 써야한다고 생각했거든요.그런데 안되더라구요...?제가 어디를 잘못 이해하고 있는걸까요?
-
미해결파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자
안녕하세요 super()에 관해 질문이 있습니다.
super().__init__()이 Unit.__init__(self)와 똑같이 동작한다는 것은 알겠습니다. 그런데 강사님께서 말씀하셨듯이 다중상속에서는 먼저 상속받은 부모클래스의 메소드가 먼저 호출된다고 하셨는데요.그렇다면 super()는 단일 부모 클래스만 상속받고 싶을때 사용하려고 만든 메소드인가요??